2014-12-03 70 views
-2

我有一個集合叫做:Parties找到兩個文件之間的共同點MongoDB

每個文檔具有相同的JSON結構,並有許多key values

對這個問題的最重要的關鍵是:HostParticipatekey-values所以每個文件看起來像這樣:

{ 
    "_id":"Party-n01", 
    "host":"Jake", 
    ..... , 
    "participate":["Jane","Jimmy","Jeremiah"] , 
    ... 

} 

我試過到目前爲止: 我有一個查詢那會給我一個用戶的活動(一個用戶)。

活動要麼是託管參加一個。我曾經在我的服務器端運行這個查詢 ,每個用戶一次,然後交叉引用這兩個列表,結果非常慢。

觀光爲了解決這個問題知道:這部分是已 完成的,所以你可以依靠那些低於該系統已經可以確保 ,你不會有在參加重複鍵領域。

系統已經確保主機不能在 參與。

每個用戶都是主持人或參與者是唯一的,不能在聚會中參與一次以上的活動 。

的問題是:

1)鑑於類似上面的多個文件,我怎麼能找到黨共同的ID>給定的兩個用戶之間?

2)這是可能與 只有聚合框架?或者Map/Reduce必須在這裏完成?

回答

0

正確答案:

1)是:查詢語法像這樣:

db.parties.aggregate([ 
{ 
    "$match": { 
     "$or": [ 
      { 
       "$and": [ 
        { 
         "host": "user1" 
        }, 
        { 
         "participated": { 
          "$in": [ 
           "user2" 
          ] 
         } 
        } 
       ] 
      }, 
      { 
       "$and": [ 
        { 
         "host": "user2" 
        }, 
        { 
         "participated": { 
          "$in": [ 
           "user1" 
          ] 
         } 
        } 
       ] 
      } 
     ] 
    } 
}, 
{ 
    "$project": { 
     "_id": 1 
    } 
} 
], 
    { $group: { 
     _id: null, count: { $sum: 1 } 
     } 
    }]) 

這個查詢將返回常見的締約方數目。

要獲得身份證號,請刪除$group

2)是的,如上所述。