0

次のドキュメント構造があるとします。

{ _id : 1,
  items: [ {n: "Name", v: "Kevin"}, ..., {n: "Age", v: 100} ],
  records : [ {n: "Environment", v: "Linux"}, ... , {n: "RecordNumber, v: 555} ]
}

と に 2 つの複合インデックスを作成するitems.n-items.vrecords.n-records.v$allクエリを実行できます。

db.collection.find( {"items" : {$all : [{ $elemMatch: {n: "Name", v: "Kevin"} },
{$elemMatch: {n: "Age", v: 100} } ]}})

で同様の検索を実行することもできますrecords

db.collection.find( {"records" : {$all : [{ $elemMatch: {n: "Environment", v: "Linux"} },
{$elemMatch: {n: "RecordNumber", v: 555} } ]}})

インデックスを使用してアイテムレコードフィールドに基づいてドキュメントを検索するクエリを実行できますか?

item.n = "Name" and item.v = "Kevin" AND record.n="RecordNumber" and record.v = 100 であるすべてのドキュメントを検索します

を使用してこれが可能かどうかはわかりません$all

4

1 に答える 1

2

インデックスを使用して 1 つの配列に対してクエリを実行できますが、両方をクエリすることはできません。ドキュメントごとに、While you can create multikey compound indexes, at most one field in a compound index may hold an array.

特に:

  • インデックスを使用して、Compound複数のフィールドにインデックスを付けることができます。
  • インデックスを使用してMultikey、配列のすべての要素にインデックスを付けることができます。
  • インデックスをインデックスMultikeyの 1 つの要素として使用できますcompound
  • インデックスで複数のインデックスを使用することはできません multikeycompound

ドキュメントには、この理由がかなり明確に示されています。

MongoDB は並列配列にインデックスを付けません。これは、複合キーのデカルト積の各値をインデックスに含める必要があるためです。これにより、インデックスがすぐに非常に大きくなり、維持が困難になる可能性があります。

于 2013-10-15T18:50:39.977 に答える