MongoDB - 使用 Java 添加嵌套数组

MongoDB - add nested arrays using Java

我正在尝试使用 Java 在 "simulatedProducts" 数组中添加一个 "discountList" 数组来填充 MongoDB 集合。但是,它们是单独添加的,我不确定如何编写它以便在 simulatedProducts 中填充 discountList。

有人可以帮我解决这个问题吗?

这是代码(每个都在一个里面):

DBCollection collection = database1.getCollection("wallet");

document.put("ID", id);

BasicDBObject document = new BasicDBObject();

collection.insert(document);

DBObject listItem = new BasicDBObject();
BasicDBObject pushOnProduct = new BasicDBObject();
for (Product produto : wallet.getSimulation().getFutureProductList()){
   listItem = new BasicDBObject("simulatedProduct", new BasicDBObject
                               ("name",produto.getName()).append("minimum",produto.getMinumum()).append[...]);

pushOnProduct.put("$push", listItem);
collection.update(document, pushOnProduct,true,true);

for(Discount discount: produto.getDiscountList()){
    listItem = new BasicDBObject("discountList", new BasicDBObject
                ("nameDiscount",discount.getNameDiscount()).append("percentage",discount.getPercentage()));

    pushOnProduct.put("$push", listItem);
    collection.update(document, pushOnProduct,true,true);
 }

添加到集合的返回结果:

{
    "simulatedProduct": [{
            "name": "X",
            "minimum": 1000
        }, {
            "name": "Test",
            "minimum": 2380
        }, "discountList": [{
            "nameDiscount": "Tax",
            "percentage": 3
        }, {
            "nameDiscount": "Something",
            "percentage": 3
        }]
    }
}

预期结果:

{
    "simulatedProduct": [{
            "name": "X",
            "minimum": 1000,
            "discountList": [{
                "nameDiscount": "Tax",
                "percentage": 3
            }, {
                "nameDiscount": "Something",
                "percentage": 3
            }]
        }, {
            "name": "Test",
            "minimum": 2380
        }, "discountList"
    }
}

您可以重构代码。

下面的代码将一次迭代一个产品,使用设置 nameminimum 创建更新文档并推送 discountList 并将更新文档添加到 productList.

您可以 运行 使用 productList 的更新查询来推送整个 simulatedProduct 数组。

类似

 BasicDBList productList = new BasicDBList();
 for (Product produto : wallet.getSimulation().getFutureProductList()) {
    BasicDBList discountList = new BasicDBList();
    for (Discount discount : produto.getDiscountList()) {
       discountList.add(new BasicDBObject("nameDiscount", discount.getNameDiscount()).append("percentage", discount.getPercentage()));
    }
    productList.add(new BasicDBObject("name", produto.getName()).append("minimum", produto.getMinimun()).append("discountList", discountList));
 }
 DBObject update = new BasicDBObject("$push", new BasicDBObject("simulatedProduct", productList));
 collection.update(document, update, true,true);