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

MongoDB Java:从数组中删除符合指定条件的子文档

解决MongoDB Document中删除指定子文档的问题

我来帮你补全代码,实现从ObjData数组中删除Order字段值为"54321"的子文档需求。这里默认你使用的是MongoDB Java驱动中的Document类,以下是完整的实现方案:

完整代码实现

import org.bson.Document;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class JsonDocumentProcessing {
    public static void main(String[] args) {
        // 原始JSON字符串
        String tmp = "[ { \"ID\":\"12\", \"Date\":\"2018-02-02\", \"ObjData\":[ { \"Name\":\"AAA\", \"Order\":\"12345\", \"Extra1\":{ \"Temp\":\"3\" }, \"Extra2\":{ \"Temp\":\"5\" } }, { \"Name\":\"BBB\", \"Order\":\"54321\", \"Extra1\":{ \"Temp\":\"3\" }, \"Extra2\":{ \"Temp\":\"5\" } } ] } ]";
        
        // 解析JSON为Document列表(原始JSON是数组格式)
        List<Document> docList = Document.parse(tmp);
        Document mainDoc = docList.get(0);
        
        // 获取ObjData对应的子文档列表
        List<Document> objDataList = mainDoc.getList("ObjData", Document.class);
        
        // 方式1:传统遍历过滤
        List<Document> filteredObjData = new ArrayList<>();
        for (Document subDoc : objDataList) {
            String orderValue = subDoc.getString("Order");
            if (!"54321".equals(orderValue)) {
                filteredObjData.add(subDoc);
            }
        }

        // 方式2:Java 8+ Stream API(更简洁)
        // List<Document> filteredObjData = objDataList.stream()
        //         .filter(subDoc -> !"54321".equals(subDoc.getString("Order")))
        //         .collect(Collectors.toList());
        
        // 将过滤后的新数组替换原ObjData字段
        mainDoc.put("ObjData", filteredObjData);
        
        // 输出验证处理后的结果
        System.out.println(mainDoc.toJson());
    }
}

关键步骤说明

  • 解析JSON:你的原始JSON是数组格式,所以Document.parse()会返回List<Document>,需要取出第一个元素作为主处理文档。
  • 获取子数组:通过getList("ObjData", Document.class)方法,直接把ObjData字段转换为Document类型的列表。
  • 过滤目标子文档:可以选择传统遍历判断,也可以用Java 8的Stream API实现更简洁的过滤逻辑,核心都是排除Order值为"54321"的子文档。
  • 更新主文档:把过滤后的新列表重新赋值给主文档的ObjData字段,完成修改。

如果你的MongoDB驱动版本较低,API可能略有差异,但核心逻辑一致——定位目标数组、过滤元素、替换原数组即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:25:34