Java 如何使用MongoCollections updateOne方法更新/插入嵌套数组?
下面是该文档的一个简化示例Java 如何使用MongoCollections updateOne方法更新/插入嵌套数组?,java,arrays,mongodb,mongo-collection,Java,Arrays,Mongodb,Mongo Collection,下面是该文档的一个简化示例 { "username":"someUsername", "bank":[ { "item_id":45, "item_amount":10 }, { "item_id":45, "item_amount":10 } ] } 如何将item_id=45的item_amount值增加3?如果数组中不存在item_id
{
"username":"someUsername",
"bank":[
{
"item_id":45,
"item_amount":10
},
{
"item_id":45,
"item_amount":10
}
]
}
如何将item_id=45的item_amount值增加3?如果数组中不存在item_id=45,它将被添加,它的item_amount值将为3
我相信MongoCollection的updateOne是使用java处理mongodb的最新方式。我宁愿用那种方法,我就是想不出正确的方法。我用旧的更新方法找到了很多答案,所以请不要引用这些答案,除非我遗漏了一些有用的东西。请尝试以下代码片段;0
db.items.find({'bank.item_id': 45}).forEach(function(myDoc) {
var count_action = {};
if (is_itemid_exist(45,myDoc.bank,'item_id')) {
count_action['bank.$.item_amount'] =3;
db.items.update(
{'bank.item_id': 45},
{
$inc: count_action
});
} else {
db.items.insert({'bank': [{'item_id':45,' item_amount':3}]})
}
});
函数为_itemid_exist,用于上述查询-
function is_itemid_exist(value, search,key) {
if (!search || (search.constructor !== Array && search.constructor !== Object)) {
return false;
}
for (var i = 0; i < search.length; i++) {
if (search[i].key === value) {
return true;
}
}
return false;
}
谢谢我觉得这就像是javascript代码。我需要java.query的语法为mongodb,您可以根据您的useBy查询更新函数“is_itemid_exist”,您是说QueryBuilder吗?因为我在mongodb的3.0Java驱动程序api中没有看到查询类。但也许我是瞎子?