我见过类似this或this SO question的示例,我们可以轻松地使用positionnal $运算符更新数组中的对象。
我正在尝试做同样的事情,但是我必须使用对象子属性。
示例:
// Data model:
UserSchema = new Schema({
permissionsPerOrganization: [{
organization: {
type: ObjectId,
ref: 'Organization'
},
role: {
type: ObjectId,
ref: 'Role'
}
}],
我必须使用确切的_id更新permissionsPerOrganization
中的角色。
这是我所拥有的:
this.activeSchema.findByIdAndUpdate(
{ _id: user._id, 'permissionsPerOrganization.organization._id': org._id },
{ 'permissionsPerOrganization.$.role': roleId },
{
new: true
})
我还尝试了新的$[identifier]语法,这种语法似乎是针对这种用例而设计的,但是它失败了……
请问您有什么线索吗?
答案 0 :(得分:2)
您可以按照以下方式尝试使用arrayFilters
db.collection.update(
{ "_id": user._id },
{ "$set": { "permissionsPerOrganization.$[array].role": roleId }},
{ "arrayFilters": [{ "array.organization": org._id }], new: true }
)