MongoDB-使用Java添加嵌套数组

MongoDB-使用Java添加嵌套数组,java,arrays,mongodb,nested,mongodb-java,Java,Arrays,Mongodb,Nested,Mongodb Java,我试图使用Java在“simulatedProducts”数组中添加一个“折扣列表”数组,以填充MongoDB集合。但是,它们是单独添加的,我不确定如何编写,以便在模拟产品中填充折扣列表 有人能帮我吗 这是代码(每个代码包含一个): 在集合上添加的返回结果: { "simulatedProduct": [{ "name": "X", "minimum": 1000 }, { "name": "Test

我试图使用Java在“simulatedProducts”数组中添加一个“折扣列表”数组,以填充MongoDB集合。但是,它们是单独添加的,我不确定如何编写,以便在模拟产品中填充折扣列表

有人能帮我吗

这是代码(每个代码包含一个):

在集合上添加的返回结果:

{
    "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"
    }
}

您可以重构代码

下面的代码将一次迭代一个产品,使用设置
名称
最小值
创建更新文档,并按下
折扣列表
,将更新文档添加到
产品列表

您可以使用
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);

你能再加一点代码吗?
文档
字段的值是多少?为什么不只做一次更新呢?添加了更多的代码。我做了第二次更新,因为我想将另一个列表推送到第一个列表的产品中,所以我需要它在推之前就在那里。看起来它不识别“$push”,它在这一行给了我“无效的BSON字段名$push”:DBObject update=new BasicDBObject(“simulatedProduct”,new BasicDBObject”($push),productList));更新为包含文档而不是键值对,并更改键和推送修改器的顺序。
 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);