mongodb シェルでクロージャーを使用する方法について、私はちょっと混乱しています。
開発中にのみ使用できる関数を作成して、その一部でドキュメントをすばやく検索したいと考えています_id
。
$where
この関数は、必要なマッチングを行うセレクターを返す必要があります。
次のように書きたかったのです。
var id = function(pattern, selector) {
return Object.extend({
$where: function() {return (this._id + "").indexOf(pattern) != -1;}
}, selector);
};
しかし、試してみると、次のエラーが表示されます。
db.mycollection.find(id("ab1"));
error: {
"$err" : "JavaScript execution failed: ReferenceError: pattern is not defined near ').indexOf(pattern) ' ",
"code" : 16722
}
手動で呼び出す$where
と、奇妙なことに十分に機能するようです。
id("ell").$where.call({_id: "hello"}); // true
私はこれを機能させるための解決策としか考えられませんでしたが、これは明らかにひどいものです。
明確にするために:この方法はnew Function
正常に機能しますが、上記の方法も機能するはずなので、好きではありません。
var id = function(pattern, selector){
return Object.extend({
$where: new Function("return (this._id + '').indexOf('" + pattern + "') != -1;")
}, selector);
};
- クロージャーが機能しないのはなぜですか?クロージャーは mongodb shell で機能しますか?
- おまけの質問:この関数をユーザー プロファイルのどこかに登録して、自動的にロードすることはできますか?