【问题标题】:MongoDB Java - Pushing to a nested Array?MongoDB Java - 推送到嵌套数组?
【发布时间】:2013-05-28 23:45:19
【问题描述】:

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

{
    level1 : {
       - arr1: [
                  "val1"
               ]
    }
}

我试过了

 coll.update(entry, new BasicDBObject("$push", new BasicDBObject("level1", new BasicDBObject("arr1", "val2"))));

其中coll 是集合对象,entry 是上面的条目。

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

【问题讨论】:

  • coll.update(entry, new BasicDBObject("$push", new BasicDBObject("level1.arr1", "val2")))

标签: java mongodb


【解决方案1】:

您可以使用点符号引用子文档“level1”中的数组。因此,无需像之前那样创建嵌套 DBObject,您只需:

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" ] } }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 2018-09-26
    • 2020-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多