假设我有以下模式:
{
_id: ObjectId(1),
title: string,
answers: [
{
_id: ObjectId(2),
text: string,
upVotes: [
{
_id: ObjectId(3),
userId: ObjectId(4)
}
]
}
]
}
我想要的是从答案中提取特定用户的投票,并返回新的更新结果。例如,找到一个id为1的问题,并获得id为2的特定答案,然后从该答案中使用upvotes中的userId提取我的投票。我想用一个findOneAndUpdate
查询
您甚至可以使用带有$pull
运算符的单个$
位置来更新嵌套数组
db.collection.findOneAndUpdate(
{ "_id": ObjectId(1), "answers._id": ObjectId(2) },
{ "$pull": { "answers.$.upVotes": { "userId": ObjectId(4) }}}
)
我想我明白你想在特定的数组中进行搜索
db.collection.update(
{
"_id": "507f1f77bcf86cd799439011", // id field
"answers.upVotes._id":"507f1f77bcf86cd799439011" //id array
}
),{
"$set":{"answers.$.upVotes": {userId :"507f1f77bcf86cd799439011"}}},//edit
//use "addToSet" for add