代码之家  ›  专栏  ›  技术社区  ›  TOPKAT

用arrayfilters更新嵌套数组

  •  1
  • TOPKAT  · 技术社区  · 8 年前

    我看到过这样的例子,比如 this this so question where we can easyly use the pp ositionnal$operator更新数组中的对象。

    我正在尝试进行相同的Thig,但我必须使用对象子属性。

    示例:

    数据模型: userschema=新架构({ 各组织的许可证:【{ 组织:{ 类型:objectid, ref:'组织' } 角色:{ 类型:objectid, ref:'角色' } }
    
    

    我必须更新permissionsPerOrganization中的角色,并提供准确的ID。

    我有:

    this.activeschema.findbyAndUpdate(
    _u id:user._id,'permissionsPerOrganization.organization._id:org.,
    'PermissionsPerOrganization.$.Role':角色ID,
    {
    新:真
    })
    
    
    

    我也尝试过使用新的$[identifier].syntax which see maked for the kind of use case but it failds…。

    你有线索吗?或this SO question我们可以很容易地使用positional$操作符更新数组中的对象。

    我试图做同样的事情,但我必须使用对象子属性。

    示例:

    // Data model:
    UserSchema = new Schema({
    permissionsPerOrganization: [{
        organization: {
            type: ObjectId,
            ref: 'Organization'
        },
        role: {
            type: ObjectId,
            ref: 'Role'
        }
    }],
    

    我必须更新角色permissionsPerOrganization有一个准确的身份证。

    以下是我的资料:

    this.activeSchema.findByIdAndUpdate(
        { _id: user._id, 'permissionsPerOrganization.organization._id': org._id },
        { 'permissionsPerOrganization.$.role': roleId },
        {
            new: true
        })
    

    我也试过新的[标识符]语法似乎适合这种用例,但它失败了…

    你有线索吗?

    1 回复  |  直到 8 年前
        1
  •  2
  •   Ashh    8 年前

    您可以尝试使用 arrayfilters >a>in following way

    db.collection.update(
    “:用户”
    “$set”:“PermissionsPerOrganization.$[array].role”:roleid,
    “arrayfilters”:[“array.organization”:组织.],新:真
    )
    
    以下列方式

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