mongoDB でこのマップ/リデュース システムを理解しようとしています。私のコレクションには、次の基本的なスキーマ/レイアウトがあります。
{
_id: 1,
name: n1,
website: w1,
tags: [
myTag1,
myTag3
]
}
{
_id: 2,
name: n2,
website: w2,
tags: [
myTag2,
myTag3
]
}
{
_id: 3,
name: n3,
website: w3,
tags: [
myTag2,
myTag4
]
}
一意のタグの配列を取得するにはどうすればよいですか? 今後の使用のために、これを私に返していただきたいと思います。
{
tags: [
myTag1,
myTag2,
myTag3,
myTag4
]
}
ちなみにこれは私が思いついたものですが、タグを単一のオブジェクトに結合するのではなく、各アイテムの _id とタグを返すだけです。
var map = function() {emit( this._id,{tags: this.tags});};
var reduce = function(key, values) {
var t = [];
values.forEach(function(doc) {
var tags = doc.tags;
tags.forEach(function(tag) {
if (!(tag in t)) {
t.push(tag);
}
});
});
return {tags: t};
};
var op = db.businesses.mapReduce(map, reduce, {out: "mr_results"});
db[op.result].find();