2014-02-14 32 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函数实现回调。你试过了吗。我在手机上,所以无法测试,或正确输入。 –