mongodb java для вставки встроенного документа

У меня есть коллекция со встроенными документами.

  System
  {
    System_Info: ...,

   Tenant: [ 
    { 
        Tenant_Id: ..., 
        Tenant_Info: ..., 
        Prop_Info: ...
    }, 
    { 
        Tenant_Id: ..., 
        Tenant_Info: ..., 
        Prop_Info: ...
    } ]

}

Если мне нужно вставить информацию о другом арендаторе, подобную этой

     Tenant { Tenant_Id:2,Tenant_Info:"check",prop_info:"client"}.

какой запрос mongodb для вставки встроенных документов? и как это сделать с помощью java?


person Ramya    schedule 04.09.2012    source источник


Ответы (3)


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

BasicDBObject query = new BasicDBObject();
query.put( "System_Info", "...." );

BasicDBObject tenant = new BasicDBObject();
tenant.put("Tenant_Id", 2);
tenant.put("Tenant_Info", "check");
tenant.put("Prop_Info", "client");

BasicDBObject update = new BasicDBObject();
update.put("$push", new BasicDBObject("Tenant",tenant));

coll.update(query, update,true,true);
person Parvin Gasimzade    schedule 05.09.2012
comment
проверьте здесь объяснение полей обновления. mongodb.org/display/DOCS/Updating#Updating-update% 28%29 - person Parvin Gasimzade; 05.09.2012

Вы пытаетесь добавить еще одного арендатора в массив? Если это так, вам нужно создать DBObject, представляющий арендатора, а затем $push его в массив.

В Java встроенные документы представлены объектами DBObject (подклассом которых является BasicDBObject). Вот пример вставки встроенного документа из документации:

http://www.mongodb.org/display/DOCS/Java+Tutorial#JavaTutorial-InsertingaDocument

Кроме того, вот пример использования $push в Java:

Обновление массива в MongoDB с помощью драйвера Java

person shelman    schedule 04.09.2012

... и вот как это сделать с версией монго-драйвера >= 3.1 (у меня 3.2.2):

    Document tenant = new Document("Tenant_Id", 2)
            .append("Tenant_Info", "check")
            .append("Prop_Info", "client");

    Bson filter = Filters.eq( "System_Info", "...." ); //get the parent-document
    Bson setUpdate = Updates.push("Tenant", tenant);

    coll.updateOne(filter, setUpdate);

Надеюсь, это поможет кому-то.

person OhadR    schedule 26.08.2018