使用arrayFilters更新嵌套数组

时间:2018-07-20 17:22:45

标签: node.js mongodb

我见过类似thisthis 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]语法,这种语法似乎是针对这种用例而设计的,但是它失败了……

请问您有什么线索吗?

1 个答案:

答案 0 :(得分:2)

您可以按照以下方式尝试使用arrayFilters

db.collection.update(
  { "_id": user._id }, 
  { "$set": { "permissionsPerOrganization.$[array].role": roleId  }},
  { "arrayFilters": [{ "array.organization": org._id }], new: true }
)