2012-09-06 2 views
0

У меня есть коллекция со встроенными документами.Обновление 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-код.

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

+0

первой строка означала для чтения 'Системы:' (с двоеточием) - то есть это поле в документе или является системой названием коллекции? – theon

ответ

3

Как о чем-то вроде этого (непроверенные):

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); 
+0

на будущее, добавив таргетинг верхнего уровня документа: db.coll.update ( { "System.system_type.Tenant.Tenant_Id": 2, "System_Info": "ручной" }, { $ набор: { "System.system_type.Tenant. $. Tenant_Info": "failed" } }, false, true ); –

 Смежные вопросы

  • Нет связанных вопросов^_^