【问题标题】:MongoDB - how do I remove _id:null from aggregate result?MongoDB - 如何从聚合结果中删除 _id:null?
【发布时间】:2020-07-02 00:19:00
【问题描述】:

我想知道是否有人可以提供帮助?我是使用 MongoDB 的新手,我只是在学习聚合和预测。我正在尝试平均 details.age 的结果。

最后我能够编写一些获得平均结果的代码。

db.docs.aggregate([{$group: {_id:null, "Average": {$avg:"$details.age"} } }])

有谁知道如何删除返回的查询结果中的"_id" : null

我试图从查询本身中删除 "_id" : null,但 $group 需要它 我还尝试了插入 {_id:0} 和 _id:0 的查询的不同排列,但出现错误。

查询

db.docs.aggregate([{$group: {_id:null, "Average": {$avg:"$details.age"} } }])

结果

{ "_id" : null, "Average" : 33 }

提前致谢。

【问题讨论】:

  • 添加额外阶段:{$project:{_id:0}}{$unset:"_id"}
  • 感谢 Valijon,我只是在尝试不同的排列方式将 $project 命令添加到 db.docs.aggregate([{$group: {_id:null, "Average": {$avg:"$details .age"},$project:{_id:0} } }]) 有什么建议吗?
  • 不。 db.docs.aggregate([{$group: {_id:null, "Average": {$avg:"$details.age"} } },{$project:{_id:0}}])。此外,您可以使用空字符串进行分组:db.docs.aggregate([{$group: {_id:"", "Average": {$avg:"$details.age"} } }])
  • 非常感谢 Valijon,您的解决方案非常完美。

标签: mongodb aggregation-framework


【解决方案1】:

您可以使用 $project 阶段将该字段从结果中投影出来

db.docs.aggregate([
    {$group: {_id:null, "Average": {$avg:"$details.age"} } },
    {$project: { _id: 0} }    
]);

如果您使用的是 MongoDB 4.2,您也可以使用 $unset 阶段:

db.docs.aggregate([
    {$group: {_id:null, "Average": {$avg:"$details.age"} } },
    {$unset: "_id" }    
]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多