Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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
MongoDB Java-推送到嵌套数组?_Java_Mongodb - Fatal编程技术网

MongoDB Java-推送到嵌套数组?

MongoDB Java-推送到嵌套数组?,java,mongodb,Java,Mongodb,如何推送到以下结构中的嵌套数组 { level1 : { - arr1: [ "val1" ] } } 我试过使用 coll.update(entry, new BasicDBObject("$push", new BasicDBObject("level1", new BasicDBObject("arr1", "val2")))); 其中,coll是收集对象,entry是上面的条目 但该值从

如何推送到以下结构中的嵌套数组

{
    level1 : {
       - arr1: [
                  "val1"
               ]
    }
}
我试过使用

 coll.update(entry, new BasicDBObject("$push", new BasicDBObject("level1", new BasicDBObject("arr1", "val2"))));
其中,
coll
是收集对象,
entry
是上面的条目


但该值从不被推送,也不会显示错误。我做错了什么?

您可以使用点符号引用子文档“level1”中的数组。因此,您只需要:

coll.update(entry, new BasicDBObject("$push", new BasicDBObject("level1.arr1", "val2")));
我写了一个测试来展示这一点:

@Test
public void shouldPushANewValueOntoANesstedArray() throws UnknownHostException {
    final MongoClient mongoClient = new MongoClient();
    final DBCollection coll = mongoClient.getDB("TheDatabase").getCollection("TheCollection");
    coll.drop();

    //Inserting the array into the database
    final BasicDBList array = new BasicDBList();
    array.add("val1");

    final BasicDBObject entry = new BasicDBObject("level1", new BasicDBObject("arr1", array));
    coll.insert(entry);

    // results in:
    // { "_id" : ObjectId("51a4cfdd3004a84dde78d79c"), "level1" : { "arr1" : [ "val1" ] } }

    //do the update
    coll.update(entry, new BasicDBObject("$push", new BasicDBObject("level1.arr1", "val2")));
    // results in:
    // { "_id" : ObjectId("51a4cfdd3004a84dde78d79c"), "level1" : { "arr1" : [ "val1", "val2" ] } }
}
coll.update(条目,新的BasicDBObject($push),新的BasicDBObject(“level1.arr1”,“val2”))