You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 12:12:20