2015-08-27 55 views
4

我主要關心的是在mongodb文檔中他們使用$elemMatch命令查找並從數組中拉出元素,但這在我使用時不起作用。 我的文檔結構是

{ 
"_id" : ObjectId("55dea445c3ad8cac03a7ed8e"), 
"email" : "[email protected]", 
"groups" : [ 
    { 
     "_id" : ObjectId("55dea4a4c3ad8c8005a7ed8f"), 
     "name" : "All Group" 
    } 
]} 

我想使用MongoDB的查詢從文檔中刪除組。我的查詢是:

db.users.update({"_id": ObjectId('55dea445c3ad8cac03a7ed8e')}, 
{$pull: {"groups": {$elemMatch: {"_id": ObjectId('55dea4a4c3ad8c8005a7ed8f')}}}}) 

執行查詢後,用戶文檔沒有更新並且仍然將值分組。我正在按照以下mongodb文檔:http://docs.mongodb.org/v2.6/reference/operator/update/pull/

+0

可能重複[如何刪除MongoDB中的數組元素?](http://stackoverflow.com/questions/16959099/how-to-remove-array-element-in-mongodb) – Yogesh

+1

可能重複的[MongoDB,從數組中刪除對象](http://stackoverflow.com/questions/15641492/mongodb-remove-object-from-array) – Vishwas

回答

8

您不需要$elemMatch$pull。它的參數是基本陣列本身上「查詢」:

db.users.update(
    {"_id": ObjectId('55dea445c3ad8cac03a7ed8e')}, 
    { "$pull": { "groups": {"_id": ObjectId('55dea4a4c3ad8c8005a7ed8f')}}} 
) 

所以$pull效果要在這樣一個查詢,在它自己的論點作爲陣列的子文檔內容的查詢處理中的$elemMatch作品。

它正在查看單個數組元素,與查看整個數組的文檔中的「查詢」部分不同。

+0

謝謝@布萊克斯七這是我的工作。但是我對mongodb文檔感到困惑,因爲在文檔中他們使用'$ elemMatch'查詢。 –

+0

@HarmeetSinghTaara不,他們沒有。我知道你所指的文檔,但是如果你仔細閱讀,它實際上會說:*「實際上,以下操作不會從原始集合中提取任何元素。」*。所以它實際上就是一個**不可**的例子,因爲人們認爲需要應用*'$ elemMatch'的常見錯誤。它不是。仔細讀。 –

+0

Thanks @Blakes Seven,我有更多的疑問,我們如何從列陣中移除doucment,就像文檔中提到的一樣,如下:'{ _id:1, results:[ {item:「A」,score:5,answers :[{q:1,a:4},{q:2,a:6}]}, {item:「B」,score:8,answers {[q:1,a:8},{ q:2,a:9}]} ] }'。查詢是:'db.survey.update { {}, {$ pull:{results:{$ elemMatch:{score:8,item:「B」}}}}, {multi:true} ) –