findOneAndUpdate和push数组元素给mongoose带来错误

我的查询如下所示:

const updateLikes = (item_id, userInfo) => { return new Promise((resolve, reject) => { itemLike.findOneAndUpdate({ 'item_id': item_id }, { $inc: { no_of_likes: 1 } }, { "$push": { "users": userInfo } }, { 'new': true }, (err, info) => { if (err) { reject(err); } else { if (info) { resolve(); } else { reject('no item found'); } } }); }); }; 

itemLike.js

 const itemLike = new Schema({ item_id: { type: mongoose.Schema.ObjectId, ref: 'items', index: true }, no_of_likes: { type: Number, default: 0 }, users: [{ type: mongoose.Schema.ObjectId, ref: 'user' }] }, { versionKey: false }); module.exports = mongoose.model('item_like', itemLike); 

只要我执行这个查询,我得到如下所示的错误:

 events.js:160 throw er; // Unhandled 'error' event ^ TypeError: callback.apply is not a function at Query.<anonymous> (C:\Users\anand\quFlipApi\node_modules\mongoose\lib\model.js:3702:16) at C:\Users\anand\quFlipApi\node_modules\kareem\index.js:273:21 at C:\Users\anand\quFlipApi\node_modules\kareem\index.js:127:16 at _combinedTickCallback (internal/process/next_tick.js:67:7) at process._tickDomainCallback (internal/process/next_tick.js:122:9) 

我在这里错过了什么?

查看findOneAndUpdate的文档,你提供了一个太多的参数。

它应该是conditions, update, options, callback 。 你得到一个错误,因为Mongoose试图调用{ 'new': true }作为callback函数。

看起来你的更新定义被错误地分成了两个对象。 您需要删除下面以粗体突出显示的大括号。

{$ inc:{no_of_likes:1} }{ “$ push”:{“users”:userInfo}}