我正在使用Java Mongo驱动程序进行数据库交互。我要对数据库行和相当嵌套的对象执行定期更新。像这样的东西:
MyObject:
{
_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
}
]
}
每次更新都涉及在每个List项目下myList
的myString
对象下添加新的List项目或将一些字符串附加到该对象。我发现了很多用于编写/查找项目的参考,而没有用于更新嵌套对象中的项目的参考。有人可以帮我弄这个吗。
编辑1:如果有人指出如何根据myInteger
搜索获得“列表”项之一,这也将有所帮助
PS:Java的mongo新手,请原谅我的无知
您可以使用$ push运算符插入新的列表项。
您可以在外壳程序上运行以下命令以添加新的列表项。
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)有一个未解决的问题。您可以从JIRA-1243检查它
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句