{
"_id" : ObjectId("5925e2213daf48359cb5429e"),
"email" : "test3@gmail.com",
"firstname" : "test3",
"friends" : [
{
"friend_email" : "test2@gmail.com",
"status" : 1,
"fname" : "test2"
},
{
"friend_email" : "test1@gmail.com",
"status" : 1,
"fname" : "test1"
}
]
}
我的数据库如上所示。 “朋友”里面可以有很多条目。我必须使用(假设)friend_email =“test2@gmail.com”和email =“test3@gmail.com”搜索特定条目(取决于变量值)并将其特定字段“status”更改为0。 我已经写了以下更新查询,
collection_temp.update({
"email": email(test3@gmail.com) ,
"friends" :
{$elemMatch :
{"friend_email" : friend_req_sent_to (test2@gmail.com)}
}},
{"$set":
{"friends.$.status" : 0}
},
function(err, result) {
if (result) {
console.log("SUCCESS");
} else {
console.log("FAIL");
}
});
我的查询运行正常但状态字段没有变化....请告诉我哪里错了?
答案 0 :(得分:1)
查询工作正常,您可能会从正在使用的函数返回错误的值(email
和friend_req_sent_to
)。
将所有status
字段设置为1,运行:
db.test.update({
email: "test3@gmail.com",
friends: { $elemMatch: { friend_email: "test2@gmail.com" } }
}, { $set: { "friends.$.status": 0 } })
返回:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
如果我查看find
,我可以看到文档已正确更新。