3

我已经和 Mongo 一起玩了大约一个星期,但我仍然不知道如何用 php.ini 修改 Mongo 中的嵌套数组。

所以这里是一个示例文档...

array (
  '_id' => new MongoId("4cb30f560107ae9813000000"),
  'email' => 'mo@maurice-campobasso.com',
  'firstname' => 'Maurice',
  'lastname' => 'Campobasso',
  'password' => 'GOD',
  'productions' => 
  array (
    0 => 
    array (
      'title' => 'a',
      'date' => '1286811330.899',
    ),
    1 => 
    array (
      'title' => 'b',
      'date' => '1286811341.183',
    ),
    2 => 
    array (
      'title' => 'c',
      'date' => '1286811350.267',
    ),
    3 => 
    array (
      'title' => 'd',
      'date' => '1286811356.05',
    ),
  ),
)

我不想做的是删除 productions 数组中的一个数组,但我不知道怎么做。我一直在玩 'update('$pull' => ...etc)' 但我无法让它工作。

4

2 回答 2

4

好的,有几种方法可以做到这一点。在你的情况下,我会做类似的事情

mymongoobject.update( $unset : { "productions.2" : 1 } }

这基本上是说要取消制作的“.2”元素。这里有一些文档

现在 $pull 也应该可以工作了,但它有点困难,因为“产品”实际上是一个数组数组(或具有子对象的对象)。所以你必须完全匹配数组:

mymongoobject.update( $pull : { "productions" : {'title':'d', 'date':'1286811356.05'} }

在上述情况下,未设置可能是最简单的选项(尽管它会在数组中留下一个“洞”)

于 2010-10-11T17:01:13.643 回答
1

这实际上很容易,与传统的 sql 不同,您只需修改整个数据并将其传回即可。

$cursor = $mongo->yourDB->yourCollection->findOne("_id",4cb30f560107ae9813000000);
//let's remove last item on productions
array_splice($cursor["productions"],2);
//and update the mongo document
echo $mongo->yourDB->yourCollection->update($cursor);
//it echoes 1 if successful

希望能帮助到你。

于 2010-10-11T16:58:56.720 回答