集計クエリを使用してこれを達成すると考えることができる唯一の方法は以下のとおりですが、非常に静的です。
db.test.aggregate([
{ $unwind: "$tags" },
{ $group: { _id: "$_id", name: {$first: "$name"}, firstTag: {$first: "$tags"}, lastTag: {$last: "$tags"} } },
{ $project: { name: "$name", tags: { $concat: [ "$firstTag", ",", "$lastTag" ] } } }
]);
ただし、これは mapReduce で実現できます。
db.test.mapReduce(
function() {emit(this._id, this);},
function(key, value) {return value}, {
out:"tags",
finalize: function(key, reducedVal){
reducedVal.tags = reducedVal.tags.join();
return reducedVal;
}
}
)
> db.tags.find()
{ "_id" : ObjectId("5849a9f6a4db9c5811299d08"), "value" : { "name" : "Hello World", "tags" : "simple,easy" } }