📜  MongoDB - $sort 修饰符

📅  最后修改于: 2022-05-13 01:56:58.394000             🧑  作者: Mango

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 修饰符,那么您将得到一个错误。
  • 此修饰符可以对数组中非文档的项目进行排序。
  • 如果数组项是文档,则此修饰符可以按整个文档或文档中的指定字段进行排序。

在以下示例中,我们正在使用:

排序不是文档的数组项:

在这个例子中,我们按升序对语言字段的所有项目进行排序。



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 修饰符用于仅保留语言数组的前四个排序项。