我正在寻找一个函数来对Mongo中的集合进行自定义查询。问题是,我想重用该功能。我的想法是这个(显然是做作的):
var awesome = function(count) {
return function() {
return this.size == parseInt(count);
};
}
在Mongo控制台中执行该功能,然后继续运行:
db.collection.find(awesome(5));
然而,我收到此错误:
error: {
"$err" : "error on invocation of $where function:
JS Error: ReferenceError: count is not defined nofile_b:1"
}
所以,看起来Mongo并不尊重范围,但我真的不确定原因。任何见解都将不胜感激。
深入了解我想做的事情:
文档集合具有lat / lng值,我想查找凹面或凸面多边形内的所有文档。我有写入的函数但理想情况下能够重用该函数,所以我想将组成我的多边形的点数组传递给我在Mongo端执行的函数。我看过Mongo的地理空间查询,它目前支持圈子和盒子查询 - 我需要更复杂的东西。
答案 0 :(得分:1)
如果要在查询中使用该函数,则需要将该函数保存到数据库。做:
db.system.js.save({_id : "awesome", value :
... function(count) {
... return this.size==count;
... }})
db.collection.find({"$where" : "awesome(5)"})
shell不是数据库本身,所以你不能在shell中定义一些东西并在数据库中使用它,只不过你可以在Python中定义一个变量并期望数据库知道它。