Node.js mongo/node TypeError:回调不是查询的函数

Node.js mongo/node TypeError:回调不是查询的函数,node.js,mongodb,express,coffeescript,Node.js,Mongodb,Express,Coffeescript,我正在尝试确定集合中是否存在文档。如果文档存在,我希望向对象添加属性“unread=false”。如果它不存在,我希望插入文档并向对象添加“unread=true” 上述内容的coffee脚本代码如下: functionxyz = (db, uid, events, done) -> async.each events, (eventobj) -> if db.Event.find(eventobj).count() > 0 eventobj.unrea

我正在尝试确定集合中是否存在文档。如果文档存在,我希望向对象添加属性“unread=false”。如果它不存在,我希望插入文档并向对象添加“unread=true”

上述内容的coffee脚本代码如下:

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
/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/base.js:246
抛出消息;
^
TypeError:回调不是函数
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
在Server.Base.\u callHandler(/Users/owner/Desktop/coding challenge/repo/node\u 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
位于[object object].MongoReply.parseBody(/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
在[对象]。(/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/server.js:446:20)
在emitOne(events.js:77:13)
在[object].emit处(events.js:169:7)
在[对象]。(/Users/owner/Deskto)

有人能给我解释一下发生此错误的原因以及可能的解决方案吗?

Node的MongoDB本机驱动程序遵循Node.js的异步函数约定,即每个方法接收一个回调函数作为最后一个参数。因此,它不是
db.collection.find(query.count)()
,您的函数应重写为:

db.collection.find(query).count( function(err, count){ // do stuff here } 
参数
count
捕获查询结果

您还可以将函数简化为
db.collection.count(查询,函数(err,count){}

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

我建议您查看更多信息

编辑以在CoffeeScript中给出示例: 下面是用CoffeeScript语法重写的函数

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