gpt4 book ai didi

java - 使用 Java 更新值 mongodb

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

我正在使用 Java Mongo 驱动程序进行数据库交互。我定期更新数据库行和相当嵌套的对象。像这样:

我的对象:

{
_id: dbGeneratedId,
myId: "A String ID that i created",
myTime: "new Date()",
myList:
[
{
myString: "abcdefghij",
myInteger: 9000
},
{
myString: "qwertyasdf",
myInteger: 9001
},
{
myString: "loremipsum",
myInteger: 9002
}
]
}

每次更新都涉及在 myList 下添加一个新的列表项,或者将一些字符串附加到每个列表项中的 myString 对象。我找到了很多用于编写/查找项目的引用资料,但没有找到用于更新嵌套对象中的项目的引用资料。有人可以帮我弄这个吗。

编辑 1:如果有人指出如何根据 myInteger 搜索获取列表项之一,这也会很有帮助

PS:mongo thro Java 新手,请原谅我的无知

最佳答案

您可以使用 $push 插入新的列表项运营商。

您可以在 shell 上运行以下命令来添加新的列表项。

db.myObject.update({"myId" : "A String ID that i created"},{$push:{myList: {myString:"new string", myInteger:9003}}})

您可以使用 Java 驱动程序添加列表项,如下所示。

        DBCollection coll = db.getCollection("myObject");
DBObject query = new BasicDBObject("myId", "A String ID that i created");

DBObject listItem = new BasicDBObject();
listItem.put("myString", "my new string");
listItem.put("myInteger", 9003);

DBObject updateObj = new BasicDBObject("myList", listItem);

coll.update(query, new BasicDBObject("$push", updateObj));

在shell中可以获取如下单个元素。

db.myObject.find({"myList.myInteger" : 9003}, {"myList.$" : 1})

您可以从 Java 驱动程序运行相同的代码,如下所示:

DBCursor cur = coll.find(new BasicDBObject("myList.myInteger", 9003), new BasicDBObject("myList.$", 1));

您可以按如下方式删除对象:

db.nested.update({"myId" : "A String ID that i created"},{$pull:{myList: {myString:"new string", myInteger:9003}}})

在 Java 中,您可以按如下方式执行此操作:

    DBCollection coll = db.getCollection("myObject");
DBObject query = new BasicDBObject("myId", "A String ID that i created");

DBObject listItem = new BasicDBObject();
listItem.put("myString", "my new string");
listItem.put("myInteger", 9003);

DBObject updateObj = new BasicDBObject("myList", listItem);

coll.update(query, new BasicDBObject("$pull", updateObj));

PS:目前无法更新数组中的所有项目。 Jira 上有一个 Unresolved 问题。你可以从JIRA-1243查到

关于java - 使用 Java 更新值 mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610898/

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