MongoDB合并展开文档

时间:2019-06-12 17:55:11

标签: mongodb

我正在创建mongo聚合管道,在该管道中我通过列表的字段(门)展开文档。然后,我根据单个门中某个属性的条件进行过滤。

如何将过滤后的结果重新组合在一起,以使结果保持其原始形式?

这是我收藏中的一个文件示例:

{ "uuid": "00000000-0000-0000-0000-000000000000",
  "name": "Building1",
  "doors": [
    {
     "doorUuid": "11111111-1111-1111-1111-111111111111",
     "creationTime": null
    },
    {
     "doorUuid": "22222222-2222-2222-2222-222222222222",
     "creationTime": 1560194908942
    },
    {
     "doorUuid": "33333333-3333-3333-3333-333333333333",
     "creationTime": 1560195008942
    }
  ]
}

例如,如果我想过滤掉所有带有null creationTime的门,那么我想要的输出将在上面具有相同的结构,但只有两个门。

1 个答案:

答案 0 :(得分:1)

$group$push

MongoPlayground

db.collection.aggregate([
  {
    $unwind: "$doors"
  },
  {
    $match: {
      "doors.creationTime": {
        $ne: null
      }
    }
  },
  {
    $group: {
      _id: "$_id",
      name: {
        $last: "$name"
      },
      uuid: {
        $last: "$uuid"
      },
      doors: {
        $push: "$doors"
      }
    }
  }
])