定位算子和排序

时间:2016-02-28 12:30:49

标签: mongodb

documentation说:

  

当find()方法包含sort()时,find()方法在应用位置$ projection运算符之前应用sort()来对匹配的文档进行排序。

无法对数组进行排序,那么排序根文档会如何影响$运算符?

有人能举一个实际的例子吗?

1 个答案:

答案 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上的降序排序基于完整数组内容的最大值对文档进行排序,而不仅仅基于预计值。