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"
}
}
您可以重构代码。
下面的代码将一次迭代一个产品,使用设置 name
、minimum
创建更新文档并推送 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);
我正在尝试使用 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"
}
}
您可以重构代码。
下面的代码将一次迭代一个产品,使用设置 name
、minimum
创建更新文档并推送 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);