如何编写 mongo 查询推送基于 Spring Boot 应用程序中给定索引的值

问题描述

已经存在如下文档:

{

"id":"Ranson","score":[
{
"year":"2020","type":"20match"
},{
"year":"2021","type":"21match"
}

]
}

假设我有带有键和值的哈希图。 这里 key=index 数组的位置需要更新,values=mongodataupdate 哈希图示例:

Key = 0,Value = {
"year":"2022","type":"22match"
}

Key = 1,Value = {
"year":"2023","type":"23match"
}

方法一:

    Query query = new Query();
    query.addCriteria(Criteria.where("id").is("Ranson");
    Update update = new Update();
I used set opertor for multiple values update based on indexes present in hashmap

for (Map.Entry<String,String> entry : gfg.entrySet()){
update.set("readings." +entry.getKey(),entry.getValue());
}
mongoOperation.findAndModify(query,update,FindAndModifyOptions.options().returnNew(false).upsert(true),MyData.class);

上面的 mongooperation 给出了如下的预期输出

{
"id":"Ranson","score":[
{
"year":"2022","type":"22match"
},{
"year":"2023","type":"23match"
}
]
}

方法二: 但是当我使用推操作符时,只有任何一个索引正在更新 将代码更改为以下内容

Update update = new Update();
PushOperatorBuilder push = update.push("readings");
for (Map.Entry<String,String> entry : gfg.entrySet()){
push.atPosition(Integer.valueOf(entry.getKey())).value(entry.getValue());
}
mongoOperation.findAndModify(query,MyData.class)

输出

{

"id":"Ranson","type":"21match"
}
]
} 

输出没有按预期给出,因为 hashmap 包含 2 个(键)索引,所以 2 个索引值应该更新。

如果我将 mongoOperation 放入 for 循环中,它会按预期工作

for (Map.Entry<String,String> entry : gfg.entrySet()){
push.atPosition(Integer.valueOf(entry.getKey())).value(entry.getValue());
mongoOperation.findAndModify(query,MyData.class);
}

输出按预期提供,但每次点击 mongodb 时都会出现问题,因为如果索引超过 1000。

有没有办法根据索引更新数组?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...