Mongoose如何使用位置运算符从具有特定条件的双嵌套数组中提取,并返回新结果



假设我有以下模式:

{
_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

最新更新