MongoDb 中的条件更新
Condtional Update in 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!")
}
})
你可以试试这个
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
}
});
您可以将以下查询与 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
是否有更好的方法来仅通过一个数据库调用来执行此条件更新,即仅使用 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!")
}
})
你可以试试这个
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
}
});
您可以将以下查询与 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