【问题标题】:How to get a concatenated list of an attirbute of a documents array property?如何获取文档数组属性的连接列表?
【发布时间】:2025-12-29 15:45:06
【问题描述】:

我有一个具有这种结构的集合:

db.mycollection.find({_id: 1})
{
  _id: 1,
  attribute: [
    {
      sub_id: abc,
    },
    {
      sub_id: djxk,
    }
  ]
}

我现在想要的是在集合的所有文档中用所有 sub_id 分隔的连接字符串逗号。 {sub_id: "abc, djxk"}

我尝试过的:

db.mycollection.mapReduce( function() { emit("mycollections", this._id); }, function(key, values) { return values.join(", ")}, {out: "sub_ids"})

但结果并不如预期:

{
    "result" : "sub_ids",
    "timeMillis" : 652,
    "counts" : {
            "input" : 3837,
            "emit" : 3837,
            "reduce" : 40,
            "output" : 1
    },
    "ok" : 1
} 

什么是正确的函数和参数?

谢谢

【问题讨论】:

标签: mongodb mongodb-query aggregation-framework


【解决方案1】:

你可以在这里使用聚合

db.collection.aggregate([
  { "$project": {
    "sub_id": {
      "$reduce": {
        "input": "$attribute",
        "initialValue": "",
        "in": { "$concat": ["$$this.sub_id", ",", "$$value"] }
      }
    }
  }}
])

MongoPlayground

【讨论】: