【发布时间】:2016-05-17 04:47:41
【问题描述】:
我有以下文件:
{ "_id" : 3, "quizzes" : [ 4, 5, 5 ], "labs" : [ 6, 5 ], "final" : 78, "midterm" : 70 }
{ "_id" : 1, "quizzes" : [ 4, 5, 5 ], "labs" : [ 6, 5 ], "midterm" : 70 }
如果我运行以下查询:
db.students.aggregate([ { "$project": { "midterm": 1,"final": 1 } } ])
结果如下:
{ "_id" : 3, "final" : 78, "midterm" : 70 }
{ "_id" : 1, "midterm" : 70 }
如果我仍然在 shell 中更改投影顺序,字段的顺序是否相同?我们可以保留其查询的顺序吗?
db.students.aggregate([ { "$project": { "final":1, "midterm": 1 } } ])
{ "_id" : 3, "final" : 78, "midterm" : 70 }
{ "_id" : 1, "midterm" : 70 }
顺序很重要的用例:
我有一个集合,它为用户存储每日明智的数据。如果用户在那天做了一些活动,那么文档中会有一个字段用于该用户。我们将这一天存储 200 天......在另一个集合中我们必须更新过去 200 天内 userFirstActive 的时间...
注意:在用户没有执行任何活动的那一天,该键不会有任何条目...
因此,如果我们进行 200 天的预测……除了 id 之外的第一个条目将是第一个活动日……是否可以在不获取整个文档并检查密钥是否存在的情况下实现这一目标?
【问题讨论】:
-
简短回答否!但是您可以使用
$sort运算符指定顺序。 -
@user3100115 实际上不是OP所要求的,而是“字段”的顺序而不是文档的顺序。有很多方法可以做到这一点,以及为什么“字段”并不总是按照您要求的顺序出现的原因。
标签: mongodb mongodb-query aggregation-framework