Mongodb更新陣列$sort操作符
阿新 • • 發佈:2019-02-01
一、$sort修飾符是在使用$push操作符的時候給陣列元素排序;
$sort修飾符必須和$each修飾符一起使用,你可以傳一個空陣列給$each修飾符來使$sort修飾符起作用;
{
$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 }
]
}