首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB findAndModify需要更新错误

MongoDB findAndModify需要更新错误
EN

Stack Overflow用户
提问于 2016-02-27 19:51:57
回答 1查看 301关注 0票数 0

我想不出一个更简单的findAndModify用例.....

代码语言:javascript
复制
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); 
});

但上述代码始终返回以下错误。

代码语言:javascript
复制
{ 
     [ MongoError: need remove or update ]
     name: 'MongoError',
     message: 'need remove or update',
     ok: 0,
     errmsg: 'need remove or update'
}

我是不是遗漏了什么?

我也按照zangw的回答进行了尝试

代码语言:javascript
复制
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); 
        });

现在得到另一个错误

代码语言:javascript
复制
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上不推荐)

代码语言:javascript
复制
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的形式返回更新后的文档。

EN

回答 1

Stack Overflow用户

发布于 2016-02-27 20:00:43

复制@Blacks评论

有一个关于该函数的弃用通知(已经发布了几个版本),您应该使用.findOneAndUpdate()

请注意,{ "returnOriginal": true }选项中的主要区别现在是缺省选项

对于每个findAndModify docfindAndModify

代码语言:javascript
复制
findAndModify(query, sort, doc[, options], callback)

所以请试试这个

代码语言:javascript
复制
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); 
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35669368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档