MongoDB - $sort 修饰符
MongoDB 提供了不同类型的数组更新运算符来更新文档中数组字段的值,$sort 修饰符就是其中之一。此修饰符用于在 $push 操作期间对数组项进行排序,或在 $push 操作期间按升序或降序对数组项进行排序。
句法:
{
$push: {
: {
$each: [ , , ... ],
$sort:
}
}
}
- 如果要按升序对数组的项(不是文档)或数组项(即文档)进行排序,则将
$sort
修饰符的值设置为 1。 - 如果要按降序对数组的项(不是文档)或数组项(即文档)进行排序,则将
$sort
修饰符的值设置为 -1。 - 如果数组项是文档,并且您想对文档的字段进行排序,则指定带有字段和顺序(升序或降序)的排序文档,即 {
: 1 } 或 { : - 1}。
注意:请不要在排序规范中提及包含数组字段,例如 { “myArray.field”: 1} 是错误的。 - 修饰符必须与
$each
修饰符一起出现在$push
运算符。您可以在$each
修饰符中传递一个空array[]
,这有助于$sort
修饰符显示其效果。如果您使用没有$each
修饰符的 $sort 修饰符,那么您将得到一个错误。 - 此修饰符可以对数组中非文档的项目进行排序。
- 如果数组项是文档,则此修饰符可以按整个文档或文档中的指定字段进行排序。
在以下示例中,我们正在使用:
Database: GeeksforGeeks
Collection: contributor
Document: two documents that contain the details of the contributor in the form of field-value pairs.
排序不是文档的数组项:
在这个例子中,我们按升序对语言字段的所有项目进行排序。
db.contributor.update({name: "Suman"},
{$push: { language: { $each: ["Go", "Scala"],
$sort: 1}}})
[/源代码]
对文档数组进行排序:
在这个例子中,我们按升序对文章字段的所有文档进行排序。
db.contributor.update({name: "Suman"},
{$push: { articles: { $each: [], $sort: 1}}})
按字段对文档数组进行排序:
在这个例子中,我们按 tArticle 字段(降序)对文章字段的所有文档进行排序。
db.contributor.update({name: "Suman"},
{$push: { articles: { $each: [{language: "Go", tArticles: 120},
{language: "Perl", tArticles: 24}], $sort:{tArticles: -1}}}})
使用$sort
修饰符更新数组:
在这个例子中,我们按降序对语言字段的项目进行排序。
db.contributor.update({},
{$push: {language: {$each:[], $sort: -1}}},
{multi: true})
将$sort
修饰符与其他带有 $push运算符的修饰符一起使用:
在此示例中,我们将 $sort 修饰符与其他修饰符一起使用,例如 $each 和 $slice 与 $push运算符。
db.contributor.update({name: "Rohit"},
{$push: { language: { $each: ["C", "Go"],
$sort: 1, $slice: 4}}})
这里,
- $each 修饰符用于将多个文档添加到语言数组中。
- $sort 修饰符用于对修改后的语言数组的所有项进行升序排序。
- $slice 修饰符用于仅保留语言数组的前四个排序项。