2013-02-27 25 views
10

我在MongoDB的集合,它是像下面內刪除文件:

{ 
    "_id" : "5327010328645530500", 
    "members" : [ 
     { 
      "participationCoeff" : 1, 
      "tweetID" : "5327010328645530500" 
     }, 
     { 
      "participationCoeff" : 1, 
      "tweetID" : "2820402625046999289" 
     }, 
     { 
      "participationCoeff" : 0.6666666666666666, 
      "tweetID" : "6122060484520699114" 
     }, 
     { 
      "participationCoeff" : 1, 
      "tweetID" : "4656669980325872747" 
     } 
    ] 
} 
{ 
    "_id" : "2646953848367646922", 
    "members" : [ 
     { 
      "participationCoeff" : 1, 
      "tweetID" : "2646953848367646922" 
     }, 
     { 
      "participationCoeff" : 0.75, 
      "tweetID" : "7750833069621794130" 
     }, 
     { 
      "participationCoeff" : 0.5, 
      "tweetID" : "6271782334664128453" 
     } 
    ] 
} 

基本上,收集具有集羣,其中集羣有一個_id場和members場。成員字段是一組文檔,具有以下格式。現在

{ 
      "participationCoeff" : 1, 
      "tweetID" : "5327010328645530500" 
     } 

,不時地,我對會員屬性集羣文件,通過匹配tweetID刪除這些子文件。

但是,我無法找到實現此效果的查詢。基本上,tweetID將參與許多集羣,因此將出現在多個集羣的「成員」屬性的多個子文檔中。我想提供批量的$ pull操作,我可以刪除所有羣集中的所有子文檔(即它們的成員屬性),這些文檔與特定的tweetID匹配。

一些幫助和直覺將會非常有幫助。

回答

15

這也正是$pull運營商做什麼,所以在外殼裏,你可以使用一個update像:

db.clusters.update({}, 
    {$pull: {members: {tweetID: '5327010328645530500'}}}, 
    {multi: true}) 

設置multi選項,這樣,每個文件被更新,不只是第一個。

+1

獲取以下錯誤。 '不能將$ pull/$ pullAll修飾符應用於非數組' – VaidAbhishek 2013-02-27 20:53:11

+1

@VaidAbhishek這意味着您在集合中有一些文檔,其中'members'不是數組。 – JohnnyHK 2013-02-27 20:56:05

+0

我不認爲我的收藏是這種情況。成員將是一個嚴格的數組類型屬性。 有什麼辦法使用聚合做到這一點! – VaidAbhishek 2013-02-27 21:01:25

2

這將刪除單個查詢多個微博只是傳遞一個數組$在: - 在貓鼬

db.clusters.update({}, 
{$pull: {members: {$in: [ {tweetID: '5327010328645530500'},{"tweetID" : "2820402625046999289"} ] } } }, 

{multi: true}) 

上述方法行不通所以貓鼬的更多信息: -

db.clusters .update({}, {$ pull:{members:[{tweetID:'5327010328645530500'},{「tweetID」:「2820402625046999289」}]}}),