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

如何过滤JSON响应并批量更新MongoDB中的多个文档?

批量解析JSON响应并更新MongoDB多文档

一、正确解析多订单结构的JSON

你的JSON外层以订单ID为键,每个键对应包含订单详情的子对象,直接从根节点取start_count会返回null——因为这些字段嵌套在子对象里。可以通过遍历JObject的属性提取每个订单的信息:

JObject responseObject = JObject.Parse(responseContent);
// 遍历所有订单项
foreach (var orderProp in responseObject.Properties())
{
    string orderID = orderProp.Name; // 获取订单ID,如"88996940"
    JObject orderDetails = (JObject)orderProp.Value;
    
    string orderStartCount = orderDetails["start_count"].ToString();
    string orderStatus = orderDetails["status"].ToString();
    string orderRemains = orderDetails["remains"].ToString();
    
    // 此处可暂存更新信息,或直接执行数据库更新
}

二、MongoDB批量更新多文档

单个循环调用UpdateOne也能实现需求,但效率较低,推荐用BulkWrite批量执行更新,减少数据库请求次数:

方式1:构建批量更新操作列表(推荐)

var updateOperations = new List<WriteModel<BsonDocument>>();
JObject responseObject = JObject.Parse(responseContent);

foreach (var orderProp in responseObject.Properties())
{
    string orderID = orderProp.Name;
    JObject orderDetails = (JObject)orderProp.Value;
    
    // 构建过滤条件:匹配目标订单ID
    var filter = Builders<BsonDocument>.Filter.Eq("orderID", orderID);
    // 构建更新内容(注意链式调用写法,无需重复写.Update.Set)
    var update = Builders<BsonDocument>.Update
        .Set("status", orderDetails["status"].ToString())
        .Set("start_count", orderDetails["start_count"].ToString())
        .Set("remains", orderDetails["remains"].ToString());
    
    // 添加单个更新操作到列表,确保只更新对应订单
    updateOperations.Add(new UpdateOneModel<BsonDocument>(filter, update));
}

// 执行批量更新
MyCollection.BulkWrite(updateOperations);

方式2:循环调用UpdateOne(适合小批量场景)

如果订单数量不多,也可直接在遍历JSON时逐个更新:

JObject responseObject = JObject.Parse(responseContent);
foreach (var orderProp in responseObject.Properties())
{
    string orderID = orderProp.Name;
    JObject orderDetails = (JObject)orderProp.Value;
    
    var filter = Builders<BsonDocument>.Filter.Eq("orderID", orderID);
    var update = Builders<BsonDocument>.Update
        .Set("status", orderDetails["status"].ToString())
        .Set("start_count", orderDetails["start_count"].ToString())
        .Set("remains", orderDetails["remains"].ToString());
    
    MyCollection.UpdateOne(filter, update);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:07:18