我想不出一个更简单的findAndModify用例.....
db.collection('products').findAndModify(
{
query: { _id: new o_id(cart[i]._id) },
update: { $inc: { sold: qty, onstock: (-1*qty) } },
new: true
},function(e,d) {
if ( e ) return console.log('findAndModify error',e);
});但上述代码始终返回以下错误。
{
[ MongoError: need remove or update ]
name: 'MongoError',
message: 'need remove or update',
ok: 0,
errmsg: 'need remove or update'
}我是不是遗漏了什么?
我也按照zangw的回答进行了尝试
db.collection('products').findAndModify(
{ _id: new o_id(cart[i]._id) },
{ $inc: { sold: qty, onstock: (-1*qty) } },
{ new: true },function(e,d) {
if ( e ) { return console.log('updateStock findAndModify error',e); }
console.log('updated',d);
});现在得到另一个错误
findAndModify error
{ [MongoError: exception: nextSafe():
{ $err: "Can't canonicalize query: BadValue bad sort specification",
code: 17287 }]
name: 'MongoError', message: 'exception: nextSafe():
{ $err: "Can\'t canonicalize query: BadValue bad sort specification",
code: 17287
}',
errmsg: 'exception: nextSafe():
{ $err: "Can\'t canonicalize query: BadValue bad sort specification",
code: 17287 }',
code: 13106,
ok: 0 }我正在运行MongoDB 2.6.11
解决方案,由@Blakes Seven建议(在findAndModify上不推荐)
db.collection('products').findOneAndUpdate(
{ _id: new o_id(cart[i]._id) },
{ $inc: { sold: qty, onstock: (-1*qty) } },
function(e,d) {
if ( e ) { return console.log('updateStock findAndModify error',e); }findAndModify以d.value的形式返回更新后的文档。
发布于 2016-02-27 20:00:43
复制@Blacks评论
有一个关于该函数的弃用通知(已经发布了几个版本),您应该使用.findOneAndUpdate()。
请注意,{ "returnOriginal": true }选项中的主要区别现在是缺省选项
对于每个findAndModify doc,findAndModify是
findAndModify(query, sort, doc[, options], callback)所以请试试这个
db.collection('products').findAndModify(
{ _id: new o_id(cart[i]._id) },
{ _id:'descending'},
{ $inc: { sold: qty, onstock: (-1*qty) } },
{ new: true, upsert: true},
function(e,d) {
if ( e ) return console.log('findAndModify error',e);
});https://stackoverflow.com/questions/35669368
复制相似问题