Как получить составной список атрибута свойства массива документов? - PullRequest
1 голос
/ 02 июля 2019

У меня есть коллекция с такой структурой:

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

То, что я сейчас хочу, это объединенная строковая запятая, разделенная всеми sub_ids над всеми документами коллекции. {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
} 

Что такое правильные функции и параметры?

Спасибо

1 Ответ

0 голосов
/ 03 июля 2019

Вы можете использовать агрегацию здесь

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

MongoPlayground

...