2011-10-09 31 views
1

我有節點是這樣的:

[_id] => MongoId Object (
    [$id] => 4e90cb3cd68417740c000017 
) 
[label] => mystery 
[owner] => me 
[parents] => Array (
    [0] => Array (
     [id] => MongoId Object (
      [$id] => 4e8c6bb6d68417340e0004ca 
     ) 
     [owner] => userid 
     [timestamp] => 1318112522 
    ) 
) 
[timestamp] => 1318112060 
[translabel] => mystery 
[type] => 0 

我所試圖做的是消除家長ID:4e8c6bb6d68417340e0004ca,無論他們在哪裏。

例如本應該在工作(最新蒙戈):

db.nodes.update({},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}}); 
在PHP

或equaly(最新的驅動程序等):

$mongodb->nodes->update(array(),array('$pull'=> array('parents'=>array('id'=> new MongoId("4e8c6bb6d68417340e0004ca"))))); 

都沒有做任何事情!


在另一方面:

db.nodes.update({"_id": ObjectId("4e90cb3cd68417740c000017")},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}}); 

或equaly在PHP中:

$mongodb->nodes->update(array('_id' => new MongoId("4e90cb3cd68417740c000017"),array('$pull'=> array('parents'=>array('id'=> new MongoId("4e8c6bb6d68417340e0004ca"))))); 

工作得很好!這是一個錯誤?在我的子文檔中使用「id」而不是「_id」與MongoID對象是否存在問題?預先感謝任何幫助!

回答

3

你有沒有嘗試過更新命令

db.collection.update(criteria, objNew, upsert, multi) 

多能multi flag - 指示是否匹配標準的所有文件應當更新而不是僅僅一個。可以在下面的$操作符中使用。

,改變你的查詢

db.nodes.update({},{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}},false,true); 

db.nodes.update({ "_id" : { $exists : true } },{$pull : {"parents": { "id" : ObjectId("4e8c6bb6d68417340e0004ca") }}},false,true); 

我沒有測試的代碼我自己,但我肯定的是,上述任何一個將工作..

+0

感謝您的快速回答!第一個來自Mongo Command和PHP,都是我需要的 - 因爲我只有一個節點和這個父節點 - 請你向我解釋爲什麼我需要多節點?是因爲我有空的搜索條件,並且首先沒有找到該節點 - 因此沒有更新? –

+0

是絕對正確的,因爲你有空搜索條件,並且這個節點不是第一次被發現。 Multi強制mongodb更新爲符合條件的所有文檔。在這種情況下,標準是{}(所有文檔)。你可以接受這個答案,如果有幫助... – RameshVel

+0

非常感謝 - 現在很清楚 - 對於遲到接受答案抱歉 - 這是我的第一個問題:) –

相關問題