我有这样的数据:
{"_id":"5c0a17013d8ca91bf4ee7885",
"ep1":{
"email":"test@gmail.com",
"password":"123456",
"phoneNo":"123456789",
"endpointId":"ep1"
}
}
我想匹配所有具有键 ep1 和值“ email”:“ test@gmail.com” 的对象,并设置 ep1:{}
代码:
我的req对象是这样的{“ endpointId”:“ ep1”,“ email”: “ test@gmail.com”}
let query = {[req.body.endpointId]:{email: req.body.email}};
endpointModelData.endpoint.updateMany(query, {[req.body.endpointId]:{}}, {multi: true}, function(err, doc){
if (err) return res.send(500, { error: err });
console.log(doc)
return res.status(201).send("success.");
})
但是,只有在我的 ep1 对象
中只有一个条目(即电子邮件)时,此代码才有效像这样:
{"_id":"5c0a17013d8ca91bf4ee7885",
"ep1":{
"email":"test@gmail.com"
}
}
那么,如何匹配电子邮件并忽略其他字段?
答案 0 :(得分:2)
您需要匹配:{"ep1.email":"test@gmail.com"}
,因此将query
更改为:
let query = { [`${req.body.endpointId}.email`]: req.body.email };
您可以看到filter working here
一天结束时,您的更新应如下所示:
updateMany({ "ep1.email" : "test@gmail.com" }, { "ep1": {} }, {multi: true})