我有一个名为Parties
的集合。
每个文档都具有相同的JSON
结构,并且有许多key values
。
此问题最重要的关键是:Host
和Participate
key-values
,
所以每个文档都是这样的:
{
"_id":"Party-n01",
"host":"Jake",
..... ,
"participate":["Jane","Jimmy","Jeremiah"] ,
...
}
到目前为止我尝试过的事情: 我有一个查询,它将为我提供用户(一个用户)的所有活动。
活动是托管或参与 派对。我以前运行这个查询 在我的服务器端,每个用户一次,然后交叉引用这两个列表,结果非常慢。
要解决这个问题的事情:[这部分已经是 完成,所以你可以依赖以下那些]系统已经确定了 您在参与字段中没有重复的密钥。
系统已确保无法使用主机 也参加。
每个用户都是主持人或参与者是独一无二的,而且不会更多 而不是一次在一个聚会。
问题是:
1)鉴于上述多个文档,如何在两个指定用户之间找到共同的Party ID?
2)这是否可行 仅聚合框架?或者Map / Reduce必须在这里完成?
答案 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)是的,如上所述。