gpt4 book ai didi

java - 在java中访问mongo数组中的元素

转载 作者:可可西里 更新时间:2023-11-01 10:01:15 25 4
gpt4 key购买 nike

假设我在数据库中有以下 mongo 对象:

{
"_id" : ObjectId("4f904ebb5bebd4375b759c90"),
"findme" : "someValue",
"array" : [
{
"id" : "1234"
"Y" : "0"
},
{
"id" : "3456"
"Y" : "0"
},
{
"id" : "5678"
"Z" : "0"
}
]
}

我知道我可以在 java 中使用以下点符号访问器更改数组内容...

BasicDBObject change = new BasicDBObject("findme", "someValue");   
BasicDBObject setDoc = new BasicDBObject();
setDoc.append("array.0.Y", "0");
setDoc.append("array.1.Y", "0");
setDoc.append("array.2.Z", "0");
BasicDBObject account = new BasicDBObject("$set", setDoc);
coll.update(change, account);

但是,如果我只知道 id 是“3456”而不是它在“数组”中的索引 1,我将如何更改“3456”的“Y”的值?我真的很想在创建这些查询对象和更新方法的过程中完全实现这一点……换句话说,我宁愿不拉出整个对象并遍历“数组”以找出它的位置。

谢谢!

编辑:多个数组元素可以具有字段“Y”,如编辑后的代码所示。我只想编辑特定元素的“Y”字段。

最佳答案

要使用 Java 驱动程序执行此操作,您可以执行以下操作:

DBObject queryForElem = new BasicDBObject("array", new BasicDBObject("$elemMatch", new BasicDBObject("id", "3456")));
DBObject updateMatchingElem = new BasicDBObject("$set", new BasicDBObject("array.$.Y", "1"));
coll.update(queryForElem, updateMatchingElem);

鉴于这有点笨拙,您可以改用 QueryBuilder,这会给您带来更多的可读性:

DBObject queryForElem = QueryBuilder.start("array").elemMatch(new BasicDBObject("id", "3456")).get();
DBObject updateMatchingElem = new BasicDBObject("$set", new BasicDBObject("array.$.Y", "1"));
coll.update(queryForElem, updateMatchingElem);

关于java - 在java中访问mongo数组中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com