2016-12-28 4 views
0

Mongoパーシャルフィルタは文書全体を扱うか、個々の配列アイテムに適用できますか?ユニークパーシャルインデックスはMongoの配列内でどのように動作するのですか

のUSE CASE:

スキーマ

{ references: [ 
    {source: ObjectId("57dc688a1410a81ba0fcafcd"), sourceId: 1234}, 
    {source: ObjectId("57dc688a1410a81ba0fcafee"), sourceId: 5678}, 
]} 

私はソースとソースIDは一意である必要があると言うユニークなインデックスを持っています。これは、2つの文書と単一の文書が同じSourceおよびSourceIdを持つことはできないことを意味します。

SourceIdがまだ存在しないことがあるので、これを部分的なキーにする必要があります。フィルタを追加したいのですが、 {"references.sourceId":{"$ exists":true}}

ただし、ドキュメントには単一のドキュメントに複数の参照が含まれていることがあります。私はsourceIdが配列された配列項目と、無視されることのない配列項目を必要とします。

これを行う適切な方法は何ですか?フィルターが文書全体でなければならない場合、参照のいずれかにsourceIdがない場合、文書を無視するよう指定する方法はありますか?現在、mongoは部分インデックスフィルタの演算子で論理否定を受け入れません。

答えて

0

Mongodbは、ドキュメントベースでのみインデックスを作成します。配列と複数のフィールドを持つ配列を持つドキュメントの場合は、フィールドが一意であるという制限はありません。フィールド内で一意のインデックスを部分式で適用する場合でも、配列内で同じ値を使用できます

関連する問題