【问题标题】:Condtional Update in MongoDbMongoDb 中的条件更新
【发布时间】:2016-11-15 17:36:35
【问题描述】:

有没有更好的方法来做这个有条件的更新只用一个数据库调用,即只使用user.update

user.findOne({ fbPsid: sender }, 'referal', function (err, res) {
    if (res.referal.length < 5 ) { 
        user.update(
            { fbPsid: sender },
            { 
                $set: { status: { state: -11 }  },
                $push: {
                    "referal": {
                        name: '',
                        phonenumber: '',
                        email: ''
                    }
                }
            }, function (err, res){}
        );
    } else {
        sendTextMessage(sender, "You have already completed  Your Five Referal!")
    }
}) 

【问题讨论】:

标签: node.js mongodb mongoose mongodb-update database


【解决方案1】:

您可以在 mongodb 3.2+ 中使用以下查询:(或 findAndModify 用于旧版本)

user.findOneAndUpdate({fbPsid:sender,'referal.4':{$exists:false}}, 
    {$set:{status: {state: -11}},$push:{"referal":{name:'',phonenumber:'',email:''}}}, 
    {new:true},
    function(error, result) {
      if(error) {
         console.log(error)
      } else {
        console.log(result);
      }
});

referal.4 : {$exists:false} ==> 检查数组中的索引 4。如果找到任何记录,则表示数组长度小于 5。

使用 $where 时注意:$where 评估 JavaScript,不能利用索引。 Refer $where operator

【讨论】:

    【解决方案2】:

    你可以试试这个

    user.findOneAndUpdate({fbPsid:sender, $where:'this.referal.length < 5'}, 
        {$set:{status: {state: -11}},$push:{"referal":{name:'',phonenumber:'',email:''}}}, 
        {new:true},
        function(error, updateDoc) {
          if(error) {
            // handle error
          } else {
            // success action
          }
    });
    

    【讨论】:

    • 看起来是个不错的方法,但你能告诉我如果 this.referal.length 等于 5 会返回什么吗?我可以为此写一个句柄案例吗?我是 Mongo Db 的新手跨度>
    猜你喜欢
    • 2013-10-16
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多