gpt4 book ai didi

mongodb - 是否可以在聚合框架 mongo 中按投影顺序获取字段

转载 作者:IT老高 更新时间:2023-10-28 13:18:58 24 4
gpt4 key购买 nike

我有以下文件:

{ "_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 之外的第一个条目将是第一个事件日..是否有可能在不获取整个文档并检查 key 是否存在的情况下实现这一目标?

最佳答案

默认情况下,MongoDB 按插入顺序返回字段。

例如

db.students.aggregate([  { "$project": {  "midterm": 1,"final": 1   } } ])

将返回

{ "_id" : 3, "final" : 78, "midterm" : 70 }
{ "_id" : 2, "midterm" : 60, "final" : 55 }
{ "_id" : 1, "midterm" : 70 }

你可以看到第二条记录,它的字段是我们插入的顺序。但是,我们可以通过重命名字段来玩一个技巧,让它们按您想要的顺序排列。

例如

db.students.aggregate([  { "$project": {  _midterm:"$midterm","_final": "$final"}}])

上面的查询将返回

{ "_id" : 3, "_midterm" : 70, "_final" : 78 }
{ "_id" : 2, "_midterm" : 60, "_final" : 55 }
{ "_id" : 1, "_midterm" : 70 }

这里的期中考试排在第一位,期末考试排在第二位,但有一个异常(exception)。字段名称以 _ 为前缀。如果您想要原始名称,您可以再次project

db.students.aggregate(
[
{ "$project": { _midterm:"$midterm","_final": "$final"}},
{ "$project": { midterm:"$_midterm","final": "$_final"}}
])

它会返回

{ "_id" : 3, "midterm" : 70, "final" : 78 }
{ "_id" : 2, "midterm" : 60, "final" : 55 }
{ "_id" : 1, "midterm" : 70 }

关于mongodb - 是否可以在聚合框架 mongo 中按投影顺序获取字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35254128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com