mongodb - 聚合时如何自动添加除一个字段外的所有字段?

标签 mongodb mongodb-query aggregation-framework projection

我有一个 mongodb 集合,其中包含具有多个属性(可能很多)的对象。其中一个是另一种对象类型的数组,这种类型有一个 bool 属性 StateChanged

我想查询返回此集合中的所有记录,并过滤数组以仅获取具有 StateChanged = true 的文档。

这是我已经做过的:

db.getCollection('Cycles').aggregate([
    {
        $project: {
            _id: 0,
            // Here I could add Field1: 1, Field2: 1,...
            'Subcycles' : {
                $filter : {
                    input: '$Subcycles',
                    as : 'sub',
                    cond: { $eq: ['$$sub.StateChanged',true]}
                }
            }
        }
    }
])

然而,这只会给我带来“Subcycles”系列。 我想要的是在根文档中包含其他字段。

我可以在投影中手动指定它们(如 Field1: 1、Field2: 1,...),但由于可能有很多字段,我想知道是否有一种方法可以自动将它们全部显示出来。

提前致谢!

最佳答案

您可以使用 $addFields而不是 $project .它会自动用现有字段替换新字段。

db.getCollection("Cycles").aggregate([
  { "$addFields": {
    "Subcycles": {
      "$filter": {
        "input": "$Subcycles",
        "as": "sub",
        "cond": { "$eq": ["$$sub.StateChanged", true] }
      }
    }
  }},
  { "$project" : { "_id": 0 }}
])

关于mongodb - 聚合时如何自动添加除一个字段外的所有字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56445558/

相关文章:

node.js - Mongoose 聚合 : limit the number of records in $group

php - 在 macOS 上为 xampp 安装 mongodb 扩展

javascript - 这个 mongoskin 聚合命令有什么问题?

mongodb - Mongo 不使用 $gte 和 $date 返回聚合文档

javascript - 如何检查数据库是否需要身份验证

mongodb - 将聚合操作合并到单个结果中

Mongodb插入没有_id字段的文档

node.js - 如何在 Node.js MongoDB 驱动程序中禁用操作队列

java - MongoDb 相当于 Spring Batch 中的编写器?

node.js - 创建文档并添加到同一路径中的集合