2

我正在使用 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对象中。我发现了很多用于编写/查找项目的参考资料,而没有发现用于更新嵌套对象中的项目的参考资料。有人可以帮我弄这个吗。

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

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

4

1 回答 1

2

您可以使用$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 上有一个未解决的问题。您可以从JIRA-1243检查它

于 2013-09-04T10:43:01.233 回答