昨日 MongoDB のドキュメントをチェックしていたところ、多くのオペレーターが 2 つのエントリ (1 つは射影下、もう 1 つはクエリの下) を持っていることに気付きました。
2つの違いは何ですか?彼らはほとんど同じことをカバーしているようです。
クエリは実際にはレコードのクエリですが、プロジェクションはドキュメント フィールドのプロジェクションです。
これを別の言い方をすると、プロジェクションはSELECT
SQL にあり、クエリはWHERE
です。
例を見てみましょう ( http://docs.mongodb.org/manual/reference/operator/elemMatch/ ):
db.users.find(
{ sessions: {$elemMatch:{session_id: 23}} },
{ sessions:{$elemMatch:{session_id: 23}} }
)
このクエリは $elemMatch を使用しsessions
てドキュメントのフィールド内の要素を照合user
し、見つかったの射影にはまったく同じ演算子を使用しますsession
。
もちろん、実際にはこのクエリをこのように書くことはありません。なぜならsessions.$
、射影の部分だけを行うことができるからです。しかし、より完全な方法で示すために、このように書きました。