mongodb: обновить вложенный документ массивом?

У меня есть глубоко вложенный массив PHP, который я сохранил как документ в Mongo и получил следующую структуру:

{ 
"_id" : "...", 
"categ1" : { 
    "aaa" : 112.6736, 
    "bbb" : 83.9137, 
    "ccc" : 80.3322,
     .....
    }, 
"categ2" : { 
    "xxx" : 1, 
    "yyy" : 22, 
    "zzz" : 7,
    "subcateg" : {
         "sub1" : 1,
         "sub2" : 22
         }
    } 
}

Теперь у меня есть другой массив с аналогичной структурой, и я хотел бы увеличить значения записи на значения массива модификаторов:

$modifier=array(
    'categ1' => array(
          'aaa' => 3,
          'bbb' => -1,
          'mmm' => 11
        ),
     'categ2' => array(
           'yyy' => -2,
           'subcateg' => array(
                 'sub1' => -1
            )
        )
     );

Как увеличить значения внутри документа на значения модификатора $все сразу, в одном запросе и без загрузки всего документа ?

Я просмотрел Интернет, но не смог найти никакой информации об этом. Кроме того, я довольно новичок в Mongo. Спасибо


person Mixxed    schedule 22.12.2014    source источник
comment
Что вы имели в виду под увеличением значений записи? Возможно, вы имели в виду заменить модификатором   -  person Abhi    schedule 22.12.2014
comment
я имею в виду: мне нужно увеличить значения aaa, bbb, xxx на значения, указанные в модификаторе [aaa,bbb....]   -  person Mixxed    schedule 22.12.2014


Ответы (1)


Вы можете заставить свой массив $modifier выглядеть так:

$modifier = array(
  'categ1.aaa' => 3,
  'categ1.bbb' => -1,
  'categ1.mmm' => 11,
  'categ2.yyy' => -2,
  'categ2.subcateg.sub1' => -1
)

Ссылка на то, как это получить.

Тогда вы сможете просто использовать:

$col->update(
    array("_id" => "..."),
    array('$inc' => $modifier),
    array("upsert" => true)
);
person NoOutlet    schedule 22.12.2014