Mongodb обновляет и устанавливает поле во встроенном документе

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

 System
 {
     System_Info: "automated",

     system_type:
     {
         system_id:1,

          Tenant: [ 
                  { 
                Tenant_Id: 1, 
                Tenant_Info: "check", 
                Prop_Info: ...
                  }, 
                  { 
                 Tenant_Id: 2, 
                 Tenant_Info: "sucess", 
                  Prop_Info: ...
                  } ]
                  }}

Мне нужно обновить и установить для поля Tenant_Info значение «сбой» в Tenant_Id: 2

Мне нужно сделать это с помощью mongodb java. Я знаю, что нужно вставить информацию о другом арендаторе в массив арендаторов. Но здесь мне нужно установить поле с помощью java-кода.

Может ли кто-нибудь помочь мне сделать это?


person Ramya    schedule 06.09.2012    source источник
comment
Первая строка предназначена для чтения System: (с двоеточием) - т.е. это поле в документе или System - это имя коллекции?   -  person theon    schedule 07.09.2012


Ответы (1)


Как насчет этого (не проверено):

db.coll.update(
    {
        "System.system_type.Tenant.Tenant_Id" : 2
    },
    {
        $set : {
            "System.system_type.Tenant.$.Tenant_Info" : "failed"
        }
    }, 
    false, 
    true
);

Он должен обновить первый вложенный документ в коллекции с Tenant_id из 2 для всех документов верхнего уровня. Если вам нужно настроить таргетинг на определенный документ верхнего уровня, вам нужно добавить его в поле as первого аргумента объекта в вызове update.

И эквивалент в Java:

BasicDBObject find = new BasicDBObject(
    "System.system_type.Tenant.Tenant_Id", 2
);

BasicDBObject set = new BasicDBObject(
    "$set", 
    new BasicDBObject("System.system_type.Tenant.$.Tenant_Info", "failed")
);

coll.update(find, set);
person theon    schedule 06.09.2012
comment
для дальнейшего использования добавьте документ верхнего уровня таргетинга: db.coll.update({System.system_type.Tenant.Tenant_Id: 2, System_Info: manual}, {$set: {System.system_type.Tenant.$.Tenant_Info: failed}} , ложь Правда ); - person Eyal Golan; 21.01.2015