简体   繁体   中英

MongoDB: aggregation, array of objects to string value

My question is pretty similar to: MongoDB Aggregation join array of strings to single string , but instead of pure Array, like: ['Batman', 'Robin'] I have Array of objects:

_id: 1,
field_value: [
  {
    _id: 2,
    name: "Batman"
  },
  {
    _id: 3,
    name: "Robin"
  }
]

I am trying to use $reduce but got error instead.

I want to receive the following result:

  _id: 1,
  field_value: "Batman, Robin" /** <= String value */

or at least array of property values:

  _id: 1,
  field_value: ["Batman", "Robin"] /** <= Array of strings (name property) */

My MongoPlayground data example

You need the same approach with $reduce , $$this represents a single field_value entity so you need $$this.name :

db.collection.aggregate([
    {
        $project: {
            field_value: {
                $reduce: {
                    input: "$field_value",
                    initialValue: "",
                    in: {
                        $concat: [
                            "$$value",
                            { $cond: [ { $eq: [ "$$value", "" ] }, "", "," ] },
                            { $toString: "$$this.name" }
                        ]
                    }
                }
            }
        }
    }
])

Mongo Playground

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM