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

MongoDB C# Driver如何实现嵌套数组元素的Upsert操作

MongoDB C# 实现嵌套数组按条件插入不存在元素

前置修正(原有代码笔误)

在补全逻辑前先修正两处代码错误:

  • Builders<CcodeInfo>.Filter拼写错误,应为Builders<CodeInfo>.Filter
  • x.Barcode属性错误,应为x.Code(CodeInfo实体无Barcode属性)

插入不存在Code的实现逻辑

核心思路是利用MongoDB原子条件更新,仅当Codes数组中不存在对应Code时才执行Push操作,无需提前查询全量数组,避免并发冲突。补全insertNewCodeModels部分代码如下:

// insert new codes, only if not already existing
var insertNewCodeModels = myDoc.Codes.Select(x =>
{
    // 过滤条件:当日文档存在,且Codes数组中不存在当前Code的元素
    var codeNotExistFilter = filterMyDocBuilder.Not(
        filterMyDocBuilder.ElemMatch(day => day.Codes, c => c.Code == x.Code)
    );
    var filterDefinition = filterDate & codeNotExistFilter;

    // 更新操作:将当前CodeInfo对象追加到Codes数组
    var pushUpdate = updateMyDocBuilder.Push(c => c.Codes, x);

    return new UpdateOneModel<MyDoc>(filterDefinition, pushUpdate) { IsUpsert = false };
}).ToList();

效果验证

配合你已实现的空Ident更新逻辑,最终执行效果完全符合预期:

  • Code为1000的元素:数组中已存在且Ident非空,过滤条件不匹配,无操作
  • Code为1002的元素:数组中存在且Ident为空,执行更新操作
  • Code为1003的元素:数组中不存在,执行插入操作

内容的提问来源于stack exchange,提问作者Abra Sat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 22:54:03