2016-08-24 47 views
1

我有以下结构MongoDB的C#如何删除嵌套记录

{ 
    "_id" : "68f77d83-7141-4867-a355-16eda3ebe470", 
    "Roles" : [ 
     { 
      "Id" : "0001010260", 
      "RoleIds" : [ 
       "Customer", 
       "Admin" 
      ] 
     } 
    ] 
} 

现在我尽量只删除一个角色ID所以“客户”或“管理”。 我有两个过滤器,我与AND结合。

FilterDefinition<RoleEntry> subFilter = Builders<RoleEntry>.Filter.Eq(p => p.Sub, _sub); 
FilterDefinition<RoleEntry> idFilter = Builders<RoleEntry>.Filter.ElemMatch(p => p.Roles, r => r.Id == _role.Id); 

我可以删除整个RoleIds元素。 我不知道我是如何得到更深层次的。

UpdateDefinition<RoleEntry> updateDefinition = Builders<RoleEntry>.Update.Unset("Roles.$.RoleIds"); 
UpdateResult result = await _roleEntryConnector.RoleEntryCollection.UpdateOneAsync(andFilter, updateDefinition, null, cancellationToken); 

尝试过,但这个完全地去除RoleIds。

回答

1

哇昨天试了几个小时,现在发布后的问题,我想我明白了。

UpdateDefinition<RoleEntry> updateDefinition = Builders<RoleEntry>.Update.Pull("Roles.$.RoleIds", "Customer");