当find()方法包含sort()时,find()方法在应用位置$ projection运算符之前应用sort()来对匹配的文档进行排序。
无法对数组进行排序,那么排序根文档会如何影响$
运算符?
有人能举一个实际的例子吗?
答案 0 :(得分:3)
这意味着如果您的查询在投影数组字段上包含排序,则文档(而不是数组)将根据数组中的完整值集合进行排序,而不仅仅是投影元素。
对数组字段上的文档进行排序(如here):
对于数组,小于比较或升序排序比较 数组的最小元素,大于比较或a 降序排序比较数组的最大元素。
因此,如果您从链接到的文档中获取示例数据:
{ "_id" : 1, "semester" : 1, "grades" : [ 70, 87, 90 ] }
{ "_id" : 2, "semester" : 1, "grades" : [ 90, 88, 92 ] }
{ "_id" : 3, "semester" : 1, "grades" : [ 85, 100, 90 ] }
{ "_id" : 4, "semester" : 2, "grades" : [ 79, 85, 80 ] }
{ "_id" : 5, "semester" : 2, "grades" : [ 88, 88, 92 ] }
{ "_id" : 6, "semester" : 2, "grades" : [ 95, 90, 96 ] }
如下所示的查询演示了规则对投影和排序的影响:
db.test.find({semester: 1, grades: {$gte: 85}}, {"grades.$": 1})
.sort({grades: -1})
输出:
{
"_id" : 3.0,
"grades" : [
85.0
]
}
{
"_id" : 2.0,
"grades" : [
90.0
]
}
{
"_id" : 1.0,
"grades" : [
87.0
]
}
grades
上的降序排序基于完整数组内容的最大值对文档进行排序,而不仅仅基于预计值。