我必须修改架构中的一个子文档。在这个子文档中,我存储了一个用于保持与其他文档的关系的键。仅当第一个文档被修改时,才会修改第二个文档。我尝试使用findOneAndUpdate执行此操作。
User.findOneAndUpdate({
_id: ReceivingId,
"friendship": {
"$elemMatch": {
"_id": FriendshipId
, "verse": 1
, "status": "pending"
}
}
}, {
"$set": {
"friendship.$.status": "accepted",
"friendship.$.began": util.moment().toDate()
},
"$unset": {"friendship.$.verse": ""}
}, {"new": true})
.select('friendship.$')
.exec()
.then(function Query(upReceiving) {
if (!upReceiving)
throw new Error({status: 304, message: "No friendship update"});
var ApplicantId = upReceiving.friendship.friend;
console.log("Sender ID", upReceiving);
return User.findOneAndUpdate({ //Query
_id: ApplicantId,
"friendship": {
"$elemMatch": {
"friend": ReceivingId,
"status": "pending"
}
}
}, { //Update
"$set": {
"friendship.$.status": "accepted",
"friendship.$.began": util.moment().toDate()
}
}, {"select": "friendship.$", "new": true}).exec();
})
.then(function Query(upApplicant) {
if (!upApplicant)
return res.status(304).json({message: "No friendship update"});
res.json({message: "Friendship accepted", friendship: {sender: upApplicant._id, receiver: ReceivingId}});
}, function Error(err) {
var status = 500;
if (undefined !== err.status)
status = err.status;
console.log(err);
res.status(status).json(err);
});
第一次更新工作,但带有$运算符的select语句不返回从查询中找到的子文档。 怎么了?
答案 0 :(得分:0)
我正在读你的代码,我对它有疑问,
该字段" upReceiving.friendship。朋友"包含有效的ObjectId?
我问这个是因为我看到了这句话:
var ApplicantId = upReceiving.friendship.friend;
然后,您尝试使用ObjectId
等字段查找文档User.findOneAndUpdate(
_id: ApplicantId,..