2016-01-23 53 views
1

我想确定文档是否存在于集合中。如果文档存在,我希望将一个属性“unread = false”添加到对象。如果它不存在,我希望插入该文档并将“unread = true”添加到该对象。mongo/node TypeError:回调不是查询上的函数

代码在上述咖啡脚本如下:

functionxyz = (db, uid, events, done) -> 
async.each events, (eventobj) -> 
    if db.Event.find(eventobj).count() > 0 
     eventobj.unread = false 
    else 
     db.Event.insert eventobj 
     eventobj.unread = true 
done null, events 

我收到的错误是

/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/base.js:246 
     throw message;  
     ^

TypeError: callback is not a function 
    at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/collection/commands.js:55:5 
    at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/db.js:1197:7 
    at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/db.js:1905:9 
    at Server.Base._callHandler (/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/base.js:453:41) 
    at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/server.js:488:18 
    at [object Object].MongoReply.parseBody (/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5) 
    at [object Object].<anonymous> (/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/server.js:446:20) 
    at emitOne (events.js:77:13) 
    at [object Object].emit (events.js:169:7) 
    at [object Object].<anonymous> (/Users/owner/Deskto 

可以给我这样的人解释这个错误发生的原因和什么潜力解决方案可能是?

回答

2

Node的MongoDB Native Driver遵循异步函数的Node.js约定,即每个方法都接收回调函数作为最后一个参数。因此,而不是db.collection.find(query).count(),你的函数应该写成:

db.collection.find(query).count(function(err, count){ // do stuff here } 

参数count捕捉您的查询的结果。

您还可以将功能简化为db.collection.count(query, function(err, count){}

您的插入函数也应遵循相同的约定,使用形式为function(err, res){}的回调函数作为最后一个参数。

我建议您查看MongoDB Native Driver Docs了解更多信息。

编辑为在CoffeeScript中提供示例: 以下是使用CoffeeScript语法重写的函数。

db.Event.count(eventobj, (err, count) -> 
    // do stuff 
+0

那解决了这个问题,谢谢! – Nick

相关问题