2014-02-14 31 views
2

我在我的MongoDB實例中創建了一個存儲的javascript函數,用於計算每個集合中的記錄數。如果我去我的mongo外殼並輸入:從Mongoose調用存儲的JavaScript函數?

> db.eval("getTotals()"); 

它按預期工作。如果我嘗試通過mongo這樣調用它:

totals = mongoose.connection.db.eval("getTotals()"); 
console.log(totals); 

undefined獲取日誌記錄。有沒有人看到我在這裏做錯了?

+1

在服務器中使用JS函數並不是一個好主意,它是執行任何操作的性能最低的方法。定期查詢總是會更快,並且會有不阻塞其他線程的優勢。 –

+0

爲什麼mongo提供了一種方法呢?你能提供一些支持這個的東西嗎? –

+0

提供一點上下文:getTotals()從5個不同的集合中獲取文檔計數。我曾假設在服務器上調用一個函數會比從貓鼬執行5個不同的查詢更高效。爲什麼後者會更快? –

回答

2

大多數貓鼬調用不會像這樣返回內聯,而是期望回調被傳入以處理結果。

完全未經測試,但你可能想是這樣的:

mongoose.connection.db.eval("getTotals()", function(err, retVal) { 
    console.log(retVal) 
}); 

而在現實世界中,你的結果分配給var外面不管你想要做的範圍或的。

+0

我在這裏找到了評估文檔:http://docs.mongodb.org/manual/reference/method/db.eval/,但沒有提及回調。我只是看錯了地方? –

+0

@abe這是mongo shell。這是貓鼬不是嗎? Mongoose函數實現回調。你試過了嗎。我在手機上,所以無法測試,或正確輸入。 –