根据条件排除嵌套文档

时间:2019-03-26 16:58:56

标签: mongodb projection

我有以下格式的文件

{
  "_id": "5c9a53b348a0ac000140b5f9",
  "e": [
    {
      "_id": "d6c74cd5-5808-4b0c-b857-57ddbcc72ce5",
      "isDeleted": true
    },
    {
      "_id": "d6c74cd5-5808-4b0c-b857-57ddbcc72ce6",
      "isDeleted": false
    }
  ]
}

每个文档上都有一个元素列表,每个元素都可以删除也可以不删除。默认情况下,我不想返回已删除的数据。现在,我在服务器端对其进行过滤,但这仍然意味着不必要地传输了许多数据。是否可以在数据库中排除此数据?

我看过$elemMatch,但是它只返回一个值,因此看起来不适合该工作。

是否有一种方法可以将带有嵌套文档数组的文档投影为仅包含符合特定条件的那些子文档?

1 个答案:

答案 0 :(得分:1)

您可以在此处使用$filter聚合

db.collection.aggregate([
  { "$addFields": {
    "e": {
      "$filter": {
        "input": "$e"
        "cond": { "$eq": ["$$this.isDeleted", true] }
      }
    }
  }}
])