使用Java更新值mongodb

时间:2013-09-04 10:03:19

标签: java mongodb mongodb-update database

我正在使用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
        }
    ]
}

每次更新都涉及在myList下添加新的List项或将一些字符串附加到每个List项中的myString对象。我发现了许多用于编写/查找项目的参考,没有用于更新嵌套对象中的项目。有人可以帮我弄这个吗。

编辑1:如果有人指出如何根据myInteger搜索

获取其中一个列表项,也会有所帮助

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

1 个答案:

答案 0 :(得分:2)

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

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

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

您可以使用Java Driver添加列表项,如下所示。

        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 Driver中,您可以运行相同的代码,如下所示:

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

查看