我正在做一个大学项目,我已经阅读了关于我的问题的每篇文章,但我还没有找到解决方案。也许你可以帮助我。
代码如下:
viewerObj.update({_id: currentIDViewerVar} , {minutesWatched: 5},{upsert:true} , function (err,result) {
if (err) throw err;
console.log("Viewer " + userNameVar + " gespeichert");
console.log("minsWatched" +minsWatched);
});
我收到以下错误。我看不出我做错了什么。
events.js:160
throw er; // Unhandled 'error' event
^
TypeError: callback.apply is not a function
at C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\lib\model.js:3388:16
at Query.callback (C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\lib\query.js:2185:9)
at C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\node_modules\kareem\index.js:259:21
at C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\node_modules\kareem\index.js:127:16
at _combinedTickCallback (internal/process/next_tick.js:67:7)
at process._tickCallback (internal/process/next_tick.js:98:9)
Process finished with exit code 1
提前谢谢!
答案 0 :(得分:2)
您使用的论据太多了。
改变这个:
viewerObj.update({_id: currentIDViewerVar} , {minutesWatched: 5},{upsert:true} , function (err,result) {
if (err) throw err;
console.log("Viewer " + userNameVar + " gespeichert");
console.log("minsWatched" +minsWatched);
});
到此:
viewerObj.update({_id: currentIDViewerVar, minutesWatched: 5}, {upsert:true}, function (err,result) {
if (err) throw err;
console.log("Viewer " + userNameVar + " gespeichert");
console.log("minsWatched" +minsWatched);
});
参见文档:
答案 1 :(得分:2)
如果您要更新mongoose文档,则不要将查询作为第一个参数传递。
因此,这种更新方法需要3个参数
第三个是回调,你传入一个对象({upsert: true}
),其中update方法需要回调。这就是你得到callback.apply is not a function
的原因。仅仅因为{ upsert: true }
不是函数。
答案 2 :(得分:0)
在我的情况下,我使用猫鼬的聚合方法(5.1.2)面临这个问题。相同的代码正在处理< 4.9但是在升级到5时被破坏了。
我刚在查询中添加了大写字母
User.aggregate([{
$match: {
isDeleted: 0,
isActive: 1,
_id: Mongoose.Types.ObjectId(userId)
}
}, {
$project: {
claps: 1,
showIcon: { $cond: [{ $gt: [{ $size: "$userBadges" }, 0] }, 1, 0] },
}
}])
.exec(function (err, data) {});
`