2017-08-22 163 views
0

我有一个具有以下收集数据库:蒙戈DB查询制定

{id1: "1", id2: "a"}, {id1: "2", id2: "a"}, {id1: "3", id2: "a"}, {id1: "1", id2: "b"}, {id1: "2", id2: "b"} 

我想找到id2给出id1名单:1,2

给出的应该是b给出的答案它是唯一的id2只有1,2

如果给出的'id1'的列表是1,2,3,那么找到的'id2'应该是'a',因为'a'与1,2有关和3

如何在Mongodb上优先使用聚合进行查询。

+1

这个问题没有道理,闻起来像作业 – robjwilkins

+0

我进一步解释了这个问题,如果你可以帮助这将是伟大的 – lenq297

回答

0

我想我明白你想要做什么。通过ID2

db.<collection_name>.aggregate([ 
    {$group:{_id:"$id2",id1Set:{$addToSet:"$id1"}}}, 
    {$match:{"id1Set":{$size:2,$all:["1","2"]}}} 
]) 

这个查询将组的文件,并创建包含ID1的值设置:您可以汇总查询做到这一点,但它是不是很简单。然后它匹配组中的文档,查看id1Set的大小(应为2),id1Set中的值应包含“1”和“2”的所有值。

由于您的示例数据包含id2(“1”和“2”,而不是1和2)的字符串值,所以匹配取决于字符串值而不是数字。

+0

我会永远能够使用[“1”,“2”]从一个以前的聚合?我从前一场比赛中发现了阵列,然而,当我把$ all:“arrayName”,它给了我错误“$所有需要一个数组”..我没有[“1”,“2”]之前我开始聚合查询 – lenq297

+0

也许更清楚,如果你问一个新的问题,并提供您创建的查询 – robjwilkins