我的数据库中有这个对象。
Array(
[_id] => MongoId Object
(
[$id] => 4fcdb3b8749d786c03000002
)
[email] => foo@bar.com
[folder] => Array
(
[root] => Array
(
[feeds] => Array
(
[0] => Array
(
[feedID] => MongoId Object
(
[$id] => 4fcdaa9e749d786c03000001
)
[title] => title.com
)
)
[title] => root
)
)
[status] => 1
[username] => foouser)
我想从[feeds]中拉出item [0]。 我使用此代码但它不起作用:
$usersCollection->update(array("username" => "foouser"), array('$pull'=> array('folder'=>array('root'=>array('feeds'=>array('feedID'=>$id))))));
当我使用$ unset而不是$ pull时,[folder]的内容将会消失。
答案 0 :(得分:1)
您需要指定数组元素的完整值。您还必须使用'folder.root.feeds'作为您要从中提取的字段。您不希望folder
中的数组元素受到影响。
在shell上,您将运行:
db.so.update(
{ 'username' : 'foouser' },
{ $pull:
{ 'folder.root.feeds' :
{
"feedId" : ObjectId("4fcdaa9e749d786c03000001"),
"title" : "title.com"
}
}
}
);
在PHP中,这将转化为:
$c->update(
array( 'username' => 'foouser' ),
array( '$pull' =>
array( 'folder.root.feeds' =>
array(
'feedId' => new MongoId('4fcdaa9e749d786c03000001'),
'title' => 'title.com',
)
)
)
);