您的位置:首页 > 数据库 > Mongodb

Mongodb更新数组$sort操作符

2017-12-02 20:45 169 查看
一、$sort修饰符是在使用$push操作符的时候给数组元素排序;

$sort修饰符必须和$each修饰符一起使用,你可以传一个空数组给$each修饰符来使$s
4000
ort修饰符起作用;

{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$sort: <sort specification>
}
}
}

二、通过文档中的字段对文档进行排序
一个
students
集合包含如下文档:

{
"_id": 1,
"quizzes": [
{ "id" : 1, "score" : 6 },
{ "id" : 2, "score" : 9 }
]
}


如下更新添加文档到quizzes数组中,然后通过字段score对数组进行升序排列:
db.students.update(
{ _id: 1 },
{
$push: {
quizzes: {
$each: [ { id: 3, score: 8 }, { id: 4, score: 7 }, { id: 5, score: 6 } ],
$sort: { score: 1 }
}
}
}
)


更新之后数组元素是按照score字段升序排列的:

{
"_id" : 1,
"quizzes" : [
{ "id" : 1, "score" : 6 },
{ "id" : 5, "score" : 6 },
{ "id" : 4, "score" : 7 },
{ "id" : 3, "score" : 8 },
{ "id" : 2, "score" : 9 }
]
}

三、数组元素是非文档类型的排序

一个
students
集合包含如下文档:

{ "_id" : 2, "tests" : [ 89, 70, 89, 50 ] }

如下操作添加另外两个元素到scores数组中,然后按照元素排序:
db.students.update(
{ _id: 2 },
{ $push: { tests: { $each: [ 40, 60 ], $sort: 1 } } }
)

更新过的文档scores数组是按照升序排列的:
{ "_id" : 2, "tests" : [ 40, 50, 60, 70, 89, 89 ] }
四、更新数组只使用sort

一个
students
集合包含如下文档:

{ "_id" : 3, "tests" : [ 89, 70, 100, 20 ] }

更新tests字段并且并且降序排列;匹配
{
$sort: -1 }
和匹配一个空数组给$each修饰符,就像如下文档:
db.students.update(
{ _id: 3 },
{ $push: { tests: { $each: [ ], $sort: -1 } } }
)


操作的结果是更新文档字段并且按照降序排列:
{ "_id" : 3, "tests" : [ 100, 89, 70, 20 ] }
五、$sort和$push其它的一些修饰符使用

一个students集合文档有如下文档:

{
"_id" : 5,
"quizzes" : [
{ "wk": 1, "score" : 10 },
{ "wk": 2, "score" : 8 },
{ "wk": 3, "score" : 5 },
{ "wk": 4, "score" : 6 }
]
}

如下的$push操作符使用:

$each修饰符添加多个元素到文档的集合中;

$sort修饰符排列所有的文档中的元素按score降序;

$slice取排序后前三个文档集合;

db.students.update(
{ _id: 5 },
{
$push: {
quizzes: {
$each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],
$sort: { score: -1 },
$slice: 3
}
}
}
)


操作结果是:
{
"_id" : 5,
"quizzes" : [
{ "wk" : 1, "score" : 10 },
{ "wk" : 2, "score" : 8 },
{ "wk" : 5, "score" : 8 }
]
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: