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!")
)
【问题讨论】:
检查findAndModify
docs.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 中的条件更新的主要内容,如果未能解决你的问题,请参考以下文章