是否可以在Mongo中执行接受任何参数的函数?

时间:2010-06-17 02:08:25

标签: javascript mongodb

我正在寻找一个函数来对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的地理空间查询,它目前支持圈子和盒子查询 - 我需要更复杂的东西。

1 个答案:

答案 0 :(得分:1)

如果要在查询中使用该函数,则需要将该函数保存到数据库。做:

db.system.js.save({_id : "awesome", value : 
... function(count) { 
...     return this.size==count;
... }})
db.collection.find({"$where" : "awesome(5)"})

shell不是数据库本身,所以你不能在shell中定义一些东西并在数据库中使用它,只不过你可以在Python中定义一个变量并期望数据库知道它。