使用Java更新值mongo
我正在使用JavaMongo驱动程序进行DB交互。我定期对DB行和嵌套的对象执行更新。大概是这样的: MyObject:使用Java更新值mongo,java,mongodb,mongodb-update,database,Java,Mongodb,Mongodb Update,Database,我正在使用JavaMongo驱动程序进行DB交互。我定期对DB行和嵌套的对象执行更新。大概是这样的: MyObject: { _id: dbGeneratedId, myId: "A String ID that i created", myTime: "new Date()", myList: [ { myString: "abcdefghij", myInteger: 9000
{
_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新手,请原谅我的无知您可以使用运算符插入新的列表项 可以在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}}})
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));
可以按如下方式删除对象:
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}}})
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));
在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}}})
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还有一个悬而未决的问题。您可以从中查看它。这确实有用!。另外,您知道如何更新/追加列表中已有的值吗?。比如说,我需要将
loremipsum
的myString
值更新为loremipsumfoobar
,我该怎么做?非常感谢您的帮助,我已经更新了答案。目前无法更新所有数组项。关于Jira还有一个悬而未决的问题。在旁注中,您能否分享一个片段,说明如何从myList
中删除其中一个对象。更新了我的答案。再检查一遍。