【问题标题】:mongodb convert find with sort order to findAndModifymongodb 将 find 与排序顺序转换为 findAndModify
【发布时间】:2016-03-31 16:33:33
【问题描述】:

我已经使用节点本机驱动程序成功获得了推荐次数最低的用户之一

users.find().sort({referrals:1}).limit(1).toArray(function(error,result){
    console.log(error||result);
    });

^这很好用

v 我尝试过的这个和其他变体没有

当我想通过 findAndModify 使功能变得更好时,我会一遍又一遍地失败(这是我认为我从文档中得到的最接近的结果)

users.findAndModify({},{referrals:1},{$inc:{referrals:1}},{}).toArray(function(error,result){                                                          
    console.log(error||result);
    });

当我找到他时,我想获得推荐最低的用户之一和 ++1 他的推荐

【问题讨论】:

  • 您可以分两步完成 - 1)聚合以获得最低值 2)更新最低值结果
  • findAndModify 的重点是一步完成!

标签: node.js mongodb


【解决方案1】:

试着用这个查询来做:

db.users.findAndModify({
    sort: {referrals:1}, 
    update: {$inc: {referrals:1}}, 
    new: true
}, callback)

Here 你可以看到 findAndModify 的所有可能参数。

【讨论】:

    【解决方案2】:

    对于那些可能也在使用节点原生驱动程序的人:

    基于这个答案https://stackoverflow.com/a/24326067/990434

    节点原生驱动实现中的 .findAndModify() 方法与 mongo shell 实现不同。主要区别在于您没有为操作命名“关键”部分。

    所以在这种情况下,代码是:

    db.users.findAndModify(
         {}//query
        ,{referrals:1}//sort
        ,{$inc:{referrals:1}}//update
        ,{new:true}
        ,function(error,result){});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 2021-07-11
      • 2013-05-16
      • 2015-05-28
      相关资源
      最近更新 更多