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