Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java更新值mongo_Java_Mongodb_Mongodb Update_Database - Fatal编程技术网

使用Java更新值mongo

使用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

我正在使用JavaMongo驱动程序进行DB交互。我定期对DB行和嵌套的对象执行更新。大概是这样的:

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
下添加一个新的列表项,或者在每个列表项的
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
中删除其中一个对象。更新了我的答案。再检查一遍。