MongoDb 中的条件更新

Posted

技术标签:

【中文标题】MongoDb 中的条件更新【英文标题】:Condtional Update in MongoDb 【发布时间】: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!")
    
) 

【问题讨论】:

检查findAndModifydocs.mongodb.com/manual/reference/method/… 【参考方案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 的新手跨度>

以上是关于MongoDb 中的条件更新的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 更新文档

MongoDB常用操作--集合3

$push 和 $set 在同一个更新查询中,条件为 $cond pymongo mongodb

MongoDB批量更新不同查询条件的数据

MongoDB命令查找单个文档并在更新中有条件语句

mongodb的update函数更新数据,更新文档中的某个具体字段的数据