使用MongoDB C#驱动删除嵌套数组文档并返回被删文档的问题
使用MongoDB C#驱动删除嵌套数组元素并返回被删文档的问题
问题说明
我在使用官方MongoDB C#驱动删除嵌套数组中的文档时遇到问题,同时希望能返回被删除的文档。
实体类定义
public class Holder { public string Owner { get; set; } public List<Card> Cards { get; set; } } public class Card { public string Id { get; set; } public string Name { get; set; } public string Placement { get; set; } }
文档示例
{ "owner": "656dd33e0300", "cards" : [ { "id": "s39CNzu4Na3", "name" : "Department", "placement" : "8a" }, ... ] }
最初尝试的代码
var filter = Builders<Card>.Filter.Eq(x => x.Id, cardId); var res = await collection.DeleteOneAsync( Builders<Holder>.Filter.Eq(e => e.Owner, owner) & Builders<Holder>.Filter.ElemMatch(e => e.Cards, filter) ); try { return res.DeletedCount > 0; } catch (Exception ex) { throw; }
但这段代码会删除整个Cards列表,我尝试使用FindOneAndDeleteAsync也没能成功解决问题。
更新
非常感谢@markus和@yongshun的解答,两者的方案都有效,我最终选择了@markus的方案,因为它是第一个生效的方案,而且代码更简洁,和我现有代码风格一致。
内容的提问来源于stack exchange,提问作者Gixen
相关产品推荐
相关产品推荐

