在 mongodb 中将嵌入文档转换为单独的文档

Convert embedded documents into separate documents in mongodb

我有以下文件。

[
  {
    "content": {
      "abc123": {
        "_id": "abc123",
        "total": 189,
        "published": 189,
        "created": 0,
        "approved": 0,
        "rejected": 0,
        "sent_for_approval": 0
      },
      "abc124": {
        "_id": "abc124",
        "total": 1911,
        "published": 1899,
        "created": 10,
        "approved": 2,
        "rejected": 0,
        "sent_for_approval": 0
      }
    }
  },
  {
    "content": {
      "abc124": {
        "_id": "abc124",
        "total": 1911,
        "published": 1899,
        "created": 10,
        "approved": 2,
        "rejected": 0,
        "sent_for_approval": 0
      }
    }
  }
]

如何将这个键值对的对象转换成像下面这样的单独文档而不重复enter code here:

[
  {
    "_id": "abc123",
    "total": 189,
    "published": 189,
    "created": 0,
    "approved": 0,
    "rejected": 0,
    "sent_for_approval": 0
  },
  {
    "_id": "abc124",
    "total": 1911,
    "published": 1899,
    "created": 10,
    "approved": 2,
    "rejected": 0,
    "sent_for_approval": 0
  }
]

查询

  • 将对象转换为数组
  • 展开并替换根(因此每个嵌入文档都是一个单独的根文档)
  • 按键分组,只保留第一个以删除重复项
  • 替换 root 以获得预期的输出

Test code

aggregate(
[{"$set":{"content":{"$objectToArray":"$content"}}},
 {"$unwind":"$content"},
 {"$replaceRoot":{"newRoot":"$content"}},
 {"$group":{"_id":"$k", "doc":{"$first":"$v"}}},
 {"$replaceRoot":{"newRoot":"$doc"}}])