2015-12-23 2 views
1

Я делаю loop-and-update, аналогично this.Java, MongoDB: как вставить в пустой массив недокумента

И у меня есть существующий документ с полями, как так:

"field1" : { 
    "field2" : [] 
} 

С пустым массивом.

С помощью Java как разместить документ внутри пустого массива?

Делать это ...

// BasicDBObject obj... 
obj.put("field1.field2", 
      new BasicDBObject().append("a", "aa").append("b", "bb")); 

Я получаю сообщение об ошибке, которая говорит:

java.lang.IllegalArgumentException: Invalid BSON field name field1.field2 

В JavaScript, это легко - вы просто делаете, как:

obj.field1.field2["a"] = "aa"; 

и т.д. .

Любой идеал в виде?

Заранее спасибо.

ответ

3

Ваш синтаксис немного испорчен. Вы не можете использовать нотацию dot в Java. Вам нужно create и embed объектов.

Чтобы создать эквивалент:

{ "field1" : { "field2" : [ { "a" : "aa"} , { "b" : "bb"}]}} 

вам необходимо выполнить следующие операции,

BasicDBList list = new BasicDBList(); 
list.add(new BasicDBObject("a","aa")); 
list.add(new BasicDBObject("b","bb")); 

DBObject fieldTwo = new BasicDBObject("field2",list); 

DBObject fieldOne = new BasicDBObject("field1",fieldTwo); 

Аналогично, чтобы нажать что-то внутри существующего list вам нужно,

while (cursor.hasNext()) { 
    BasicDBObject obj = (BasicDBObject) cursor.next(); 
    BasicDBObject fieldOne = (BasicDBObject)(obj.get("field1")); 

    // get the list 
    BasicDBList field2List = (BasicDBList)(fieldOne.get("field2")); 

    // add something to it 
    field2List.add(new BasicDBObject("a","aa")); 
    list.add(new BasicDBObject("b","bb")); 
    list.add(new BasicDBObject("c","cc")); 


    //save it 
    this.dataColl.save(obj); 
    } 

даст вам,

{ "field1" : { "field2" : [ { "a" : "aa"} , { "b" : "bb"} , { "c" : "cc"}]}} 

BasicDBObject занимает ключевое name и value как его имя arguments.A key не может содержать оператор . в нем. Вот почему вы получаете ошибку:

Invalid BSON field name field1.field2 
Смежные вопросы