我已经和Mongo玩了大约一个星期了,我仍然无法解决如何用php修改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数组中的数组,但我无法弄清楚如何。我一直在玩'更新('$ pull'=> ......等),但我无法让它发挥作用。
答案 0 :(得分:4)
好的,有几种方法可以做到这一点。在你的情况下,我会做类似
的事情 mymongoobject.update( $unset : { "productions.2" : 1 } }
这基本上是要取消制作“.2”元素。一些docs here。
现在$ pull也应该工作,但是它有点困难,因为“productions”实际上是一个数组(或带有子对象的对象)的数组。所以你必须完全匹配数组:
mymongoobject.update( $pull : { "productions" : {'title':'d', 'date':'1286811356.05'} }
在上面的例子中,unset可能是最简单的选择(虽然它会在数组中留下一个“洞”)
答案 1 :(得分: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
希望它有所帮助。