2016-10-19 10 views
1

私は問題があります。サーバーコードではなく、MongoDB集約フレームワークまたはMapReduceレベルで解決できるかどうかを知りたいと思います。 問題: 私は持っているが、次のコレクション:MongoDBの非隣接配列要素によるグループ化

[ 
    { 
    id:..., 
    pages:[ 
     000, 
     111, 
     222, 
     666, 
     999.... 
    ] 
    }, 
    { 
    id:..., 
    pages:[ 
     111, 
     666, 
     999.... 
    ] 
    }, 
    . 
    . 
    . 
] 
私はこのパスを求めることができるようにしたい

:111、999及び凝集はカウント2で返されます、なぜ!? 111と999はこの順序で2つの文書に表示され、要素間の要素数に関係なく表示されるためです。 また、この順序で3つの配列要素が1つのドキュメントにのみ表示されるため、000,222,999を要求できます。これは1(count)だけを返します。

私の場合、注文は必須です ページがある[999,666,111]という別のドキュメントがあり、$ 666,999 $を探したい場合は、このドキュメントをその結果、私は配列を並べ替えることができないことを意味999、666は666と同じではありません、999

ので、順序が重要であると私は与えられた要素が含まれている配列を見つけたいが、この順

で私は私の問題を正しく説明してくれることを願っています.... MongoDBレベルでそれを行う最良の方法は何ですか、集約ですか?またはマップを減らすか、それとも可能であれ?事前

答えて

0

おかげ$は、すべてのオペレータは、フィールドの値が指定されたすべての要素を含む配列である文書を選択します。順序のチェックに関連

https://docs.mongodb.com/master/reference/operator/query/all/

db.Test6.count({pages: {$all: [111, 999]}}); // 2 
db.Test6.count({pages: {$all: [000, 222, 999]}}); // 1 

、私の提案は、Arrayがすでに(これは行うことは、高速/クエリは、より簡単になります)順序付けられていると仮定することです。私はできない、 https://docs.mongodb.com/master/reference/operator/update/sort/#up._S_sort

+0

グレート、おかげでたくさん私は – shbeita

+0

OKが、私はまだここに問題があることをしようとします:

配列をソート持つために、あなたは要素を押すとことを保証すべきです111,999は999,111と同じではないので配列をソートします。配列をソートすると、配列は常に111,999になりますが、私の場合はそれが正しくありません。 – shbeita

+0

私が実際に望むのは、$ allですが、要素の順序を考慮していれば、 – shbeita

関連する問題