We\'re trying to \'join\' an array of strings to a single string within an aggregation.
Given is the following dataset:
Collection 1:
{
id: 123
Starting Mongo 4.4
, the $group
stage has a new aggregation operator $accumulator allowing custom accumulations of documents as they get grouped:
// { "collectionId" : 1234, "name" : "Max" }
// { "collectionId" : 876, "name" : "Rob" }
// { "collectionId" : 1234, "name" : "Andy" }
db.collection.aggregate([
{ $group: {
_id: "$collectionId",
names: {
$accumulator: {
accumulateArgs: ["$name"],
init: function() { return [] },
accumulate: function(names, name) { return names.concat(name) },
merge: function(names1, names2) { return names1.concat(names2) },
finalize: function(names) { return names.join(",") },
lang: "js"
}
}
}}
])
// { "_id" : 876, "names" : "Rob" }
// { "_id" : 1234, "names" : "Max,Andy" }
The accumulator:
name
(accumulateArgs
)init
)accumulate
and merge
)finalize
)