0
MongoのMapReduceを使って、いくつかのドキュメントのトークンの逆インデックスを生成しています。マップ関数でドキュメントの_idにアクセスするのに問題があります。MongoDB MapReduceのmap関数でthis._idにアクセスするには?
例の文書:
{
"_id" : ObjectId("4ea42a2c6fe22bf01f000d2d"),
"attributes" : {
"name" : "JCDR 50W38C",
"upi-tokens" : [
"50w38c",
"jcdr"
]
},
"sku" : "143669259486830515"
}
(フィールドttributes [ 'UPI-トークンは']私が逆のインデックスを作成するテキスト・トークンのリストである。)
地図機能(のソース問題):
m = function() {
this.attributes['upi-tokens'].forEach(
function (token) { emit(token, {ids: [ this._id ]}); }
); }
削減機能:
r = function (key, values) {
var results = new Array;
for (v in values) {
results = results.concat(v.ids);
}
return {ids:results};
}
のMapReduceコール:私ではなく、実際のオブジェクトID列のIDを期待結果のコレクションがヌル値がどこにでも持って
db.offers.mapReduce(m, r, { out: "outcollection" })
PROBLEM。
考えられる理由:
私は同等であることを、次の2つの機能を期待していたが、彼らはありません。
m1 = function (d) { print(d['_id']); }
m2 = function() { print(this['_id']); }
は、今は実行:
db.offers.find().forEach(m1)
db.offers.find().forEach(m2)
差は、各ドキュメントのM2印刷未定義所望のようにM1がIDSを印刷しつつあります。私は理由を知りません。
質問:
- 私はMapReduceの中に使用するためマップ機能では、現在のオブジェクトの_idを取得するにはどうすればよいですか? this._idまたはthis ['_ id']は機能しません。
- なぜ正確ではないm1とm2は同等ですか?