2017-08-22 11 views
0

は、私は、次のコレクションを持つデータベースを持っている:モンゴDBクエリ製剤

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

私はid1のリスト与えられたid2見つけたい:1,2

与えられた答えがあることbを与えられるべきであるがは唯一1,2

です。指定された 'id1'のリストが1,2,3の場合、 'id2'は 'a'が1,2と関連付けられている場合 'a'になります。 AND 3

Mongodbでこれをどのようにクエリすればよいですか。

+1

この質問は理にかなっておらず、宿題のようなにおいがあります – robjwilkins

+0

私はあなたがそれを助けることができるかどうかさらに質問しました – lenq297

答えて

0

私はあなたがしようとしていることを理解していると思います。これは、集計クエリでそれを行うことができますが、それは非常に単純ではありません。

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

このクエリの意志グループ文書をID2であり、id1の値を含むセットを作成します。次に、id1Setのサイズ(2にする)を調べると、id1Setの値に "1"と "2"のすべてを含める必要があります。

例データにid2(1と2ではなく1と2)の文字列値が含まれているため、一致は数字ではなく文字列値になります。

+0

["1"、 "2"]を以前の集計?私は前の試合から見つかった配列を持っています。しかし、私が$ all: "arrayName"を置くと、 "$ allは配列が必要です"というエラーが返されます。アグリゲーションクエリを開始する前に["1"、 "2"]していない – lenq297

+0

新しい質問と作成したクエリを提供する – robjwilkins