找到两个MongoDB文件之间的共同点

时间:2014-12-03 13:30:09

标签: performance mongodb mapreduce aggregation-framework

我有一个名为Parties的集合。

每个文档都具有相同的JSON结构,并且有许多key values

此问题最重要的关键是:HostParticipate key-values,  所以每个文档都是这样的:

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

}

到目前为止我尝试过的事情: 我有一个查询,它将为我提供用户(一个用户)的所有活动。

活动是托管参与 派对。我以前运行这个查询 在我的服务器端,每个用户一次,然后交叉引用这两个列表,结果非常慢。

  

要解决这个问题的事情:[这部分已经是   完成,所以你可以依赖以下那些]系统已经确定了   您在参与字段中没有重复的密钥。

     

系统已确保无法使用主机   也参加。

     

每个用户都是主持人或参与者是独一无二的,而且不会更多   而不是一次在一个聚会。

问题是:

  

1)鉴于上述多个文档,如何在两个指定用户之间找到共同的Party ID?

     

2)这是否可行   仅聚合框架?或者Map / Reduce必须在这里完成?

1 个答案:

答案 0 :(得分: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 } 
        } 
    }])

此查询将返回普通方的数量。

要获取ID,请删除$group

2)是的,如上所述。