【问题标题】:mongodb: update nested document by an array?mongodb:通过数组更新嵌套文档?
【发布时间】:2014-12-22 16:25:05
【问题描述】:

我有一个深度嵌套的 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的新手。谢谢

【问题讨论】:

  • 你说的增加记录的值是什么意思?你的意思是用修饰符替换
  • 我的意思是:我需要将aaa,bbb,xxx的值增加修饰符[aaa,bbb ....]中指定的值

标签: php arrays mongodb nested upsert


【解决方案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)
);

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2017-04-28
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 1970-01-01
    • 2017-06-05
    • 2015-07-13
    相关资源
    最近更新 更多