2010-06-17 60 views
2

我正在尋找一個函數來對Mongo中的集合執行自定義查詢。問題是,我想重用該功能。我的想法是這樣的(顯然做作):是否有可能在Mongo中執行接受任何參數的函數?

var awesome = function(count) { 
    return function() { 
    return this.size == parseInt(count); 
    }; 
} 

執行。在蒙戈控制檯功能,然後繼續運行此:

db.collection.find(awesome(5)); 

不過,我得到這個錯誤:

error: { 
    "$err" : "error on invocation of $where function: 
JS Error: ReferenceError: count is not defined nofile_b:1" 
} 

所以,它看起來像蒙戈不尊重範圍,但我真的不知道爲什麼。任何洞察力將不勝感激。

要進入的想什麼,我做的更深入:

文檔的集合已緯度/經度值,我想找到一個凹或凸多邊形內的所有文件。我已經編寫了函數,但理想情況下可以重用函數,所以我想將構成我的多邊形的一系列點傳遞給我在Mongo結束時執行的函數。我查看了Mongo的地理空間查詢,目前它支持圓圈和框查詢 - 我需要更復雜的東西。

回答

1

如果要在查詢中使用它,則需要將該函數保存到數據庫。這樣做:

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

殼是不是數據庫本身,所以你不能在Shell中定義的東西,並在數據庫中使用它,任何比你更可以定義Python中的變量,並期望數據庫瞭解它。

相關問題