mongodb:用数组更新嵌套文档?

时间:2014-12-22 16:25:06

标签: php arrays mongodb nested upsert

我有一个深度嵌套的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
            )
        )
     );

如何通过$ modifier 一次在单个查询中的值来增加文档内的值,而无需加载整个文件

我环顾网络但找不到任何相关信息。 另外,我是Mongo的新手。感谢

1 个答案:

答案 0 :(得分:1)

您可以将$modifier数组看起来像这样:

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

Link for how to get that.

然后你应该可以简单地使用:

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