MongoDb中的条件更新

有没有更好的方式做这种条件更新只有一个数据库调用,即只使用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!") } }) 

您可以使用下面的查询与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。 如果find任何logging,表示数组长度小于5。

注意当使用$ where:$ where评估JavaScript并且不能利用索引。 操作员请参阅$

你可以试试这个

 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 } });