是否有更好的方法只使用一次数据库调用进行此条件更新,即仅使用user.update? user.findOne({ fbPsid: sender }, 'referal', function (err, res) { if (res.referal.length 5 ) { user.update( { fbPsid: sender }, { $set: {
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.如果发现任何记录,则表示数组长度小于5.
注意使用$where:$where评估JavaScript并且无法利用索引. Refer $where operator