将 Mongo 查询结果合并到单个文档中

问题描述 投票:0回答:2

我有一个 Mongo 集合:

db.items.find({}):

[{
  "_id": {
    "$oid": "64e929386a2bff904d86118a"
  },
  "name": "Copies",
  "legacy_id": 181
},
{
  "_id": {
    "$oid": "64e929386a2bff904d86118b"
  },
  "name": "Temp",
  "legacy_id": 182
},
{
  "_id": {
    "$oid": "64e929386a2bff904d86118c"
  },
  "name": "Test",
  "legacy_id": 183
}]

有没有办法将数据组合成一个包含返回查询结果

"_id": "legacy_id"
的键/值对的单个文档?像下面这样的结果对我来说效果很好。我知道我可以在事后通过一些代码来做到这一点,但我想知道是否有办法在聚合管道中做到这一点。这是我想要实现的最终结果:

[{
  "64e929386a2bff904d86118a": 181,
  "64e929386a2bff904d86118b": 182,
  "64e929386a2bff904d86118c": 183,
}]
mongodb aggregation-framework
2个回答
1
投票

首先对所有 k-v 记录元组执行无条件

$group
到数组中。然后使用
$push
将数组转换为对象。
$arrayToObject

蒙戈游乐场


0
投票
db.collection.aggregate([ { "$group": { "_id": null, "records": { "$push": { k: { "$toString": "$_id" }, v: "$legacy_id" } } } }, { "$replaceRoot": { "newRoot": { "$arrayToObject": "$records" } } } ])

并使用

$arrayToObject
你可以让它root
在这里测试:

mongo playgroung

$replaceRoot

© www.soinside.com 2019 - 2024. All rights reserved.