モンゴの書類を調べてみたところ、わかったと思います。基本的に、 これら2つのセマンティクスの違い。基本的に、クエリの最初の形式では{c: {d: d1}}
、mongoは、全体を指定していることを前提としています。 サブドキュメント。したがって、サブドキュメントがある場合{c: {d: d1, e: e1}}
、一致しません。
OTOH、クエリの2番目の形式{'c.d': d1}
サブドキュメント内の1つのフィールドにのみ一致を指定していることを意味します。これは、サブドキュメントに他のフィールドまたはサブサブドキュメント全体がある場合でも一致します。
この違いはインデックスにも及びます。 _ensureIndex({c: 1})
および_ensureIndex({'c.d': 1})
は2つの異なるインデックスであり、最初のインデックスはサブドキュメント全体にインデックスを付けますが、c.d
を使用して個々のフィールドでクエリを実行した場合は使用されません。 表記。