如何在 mongo 中修改一个字段后投影所有字段

How to project all fields after modifying one in mongo

我是 运行 mongo 中的查询,如下所示:

db.getCollection('roles').aggregate([
    {
        $project: {
            types: {$filter: { input: '$types', as: 'types',cond: {$eq: ['$$types.active', true]}}}
        },
    }
])

每个文档除了“类型”之外还有几个属性。 我现在遇到的问题是每个对象都只有 _id 和 types 属性。所有其他属性我必须手动将它们添加到投影中以获得具有所有属性加上我修改的属性的整个对象。

有更好的方法吗?

假设文件是​​:

[
  {
    "_id": 1,
    title: "abc123",
    isbn: "0001122223334",
    author: {
      last: "zzz",
      first: "aaa"
    },
    copies: 5
  }
]

添加一个字段并自动投影所有其他字段

然后使用

db.collection.aggregate([
  {
    $addFields: {
      subtitle: "meow"
    }
  }
])

相当于手动方式

db.collection.aggregate([
  {
    $project: {
      subtitle: "meow",
      title:1,
      // ...:1
    }
  }
])

添加字段并投影一些关闭

如果您需要投影一些,只需添加 2 个阶段:

db.collection.aggregate([
  {
    $addFields: {
      subtitle: "meow"
    }
  }, {$project:{title:0}}
])

您也可以使用 $unset

投影
db.collection.aggregate([
  {
    $addFields: {
      subtitle: "meow"
    }
  }, {$project:["title", "isbn"]}
])