【发布时间】:2023-03-08 23:19:02
【问题描述】:
我的数据格式为:
{
"_id" : "149",
"books" : {
"32" : "0.12",
"33" : "0.21"
}
}
我想在嵌套的books 文档中更新/插入值。如果我插入一个新行比如"39" : "0.19",那么更新后的文档应该如下所示:
{
"_id" : "149",
"books" : {
"32" : "0.12",
"33" : "0.21",
"39" : "0.19"
}
}
更新应该按照它们的工作方式工作。通过更新值。
我尝试了几种方法,但无法更新我想要的方式。
方法1:工作但结果错误
MongoCollection<Document> document = mongoTemplate.getCollection("booksCollection");
BasicDBObject query = new BasicDBObject();
query.put("_id", storeId);
BasicDBObject bookDiscount = new BasicDBObject();
bookDiscount.put(bookId, discount);
BasicDBObject update = new BasicDBObject();
update.put('$push', new BasicDBObject("books", bookDiscount));
document.findOneAndUpdate(query, update);
Method1 输出:每个值都添加到新行中
{
"_id" : "1664",
"books" : [
{
"28" : NumberDecimal("0.75")
},
{
"29" : NumberDecimal("0.18")
},
{
"30" : NumberDecimal("0.23")
},
{
"245" : NumberDecimal("0.26")
},
{
"277" : NumberDecimal("0.13")
},
{
"270" : NumberDecimal("0.19")
}
]
}
方法2:工作但结果错误
MongoCollection<Document> document = mongoTemplate.getCollection("booksCollection");
BasicDBObject query = new BasicDBObject();
query.put("_id", storeId);
BasicDBObject bookDiscount = new BasicDBObject();
bookDiscount.put(bookId, discount);
BasicDBObject update = new BasicDBObject();
update.put('$set', new BasicDBObject("books", bookDiscount));
document.findOneAndUpdate(query, update);
方法 2 输出:值总是被替换
{
"_id" : "16644158",
"locationInfRate" : {
"2857" : NumberDecimal("0.68")
},
"_class" : "com.test.books"
}
【问题讨论】:
标签: java mongodb mongo-java mongo-java-driver