MongoDB c#如何删除嵌套记录

本文关键字:删除 嵌套 记录 何删除 MongoDB | 更新日期: 2023-09-27 18:03:46

我有以下结构

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

现在我尝试只删除一个RoleId,即"Customer"或"Admin"。我有两个过滤器,我用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);

但是这完全删除了roleid

MongoDB c#如何删除嵌套记录

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

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