MongoDB:MapReduceでscopeで関数を渡せない場合の対処法

scopeで渡したはずの関数が、mapやreduce関数から呼び出せないことがよくあります。

原因はたいていscopeの指定ミスです。

例えば下記のような関数をscopeで渡したいとき、
var myfunc = function() {....}
間違った書き方
db.userlog.mapReduce(m,r, { query : query , scope : myfunc ,  out : {inline:1} } );
正しい書き方
db.userlog.mapReduce(m,r, { query : query , scope : {myfunc : myfunc} ,  out : {inline:1} } );

参考

MongoDB:MapReduceでscopeを使って関数を渡す方法

scopeに関しては本家マニュアルが非常にわかりにくいので、マニュアルを見るよりテストコードを見ましょう。 https://github.com/mongodb/mongo/blob/master/jstests/mr5.js
カテゴリ:

人気記事