2014-12-03 65 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)是的,如上所述。