我对如何在 mongodb shell 中使用闭包有点困惑。
我想创建一个我可以在开发过程中专门使用的功能,以通过它的一部分快速查找文档_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 中起作用吗?
- 额外问题:我可以在用户配置文件的某处注册此功能以自动加载吗?