MongoDB Find
MongoDB のコレクションからデータを選択して取得するには、find() と findOne() という 2 つのメソッドを使用します。
1. データの取得
1.1 find()
MongoDB のコレクションからデータを選択するには、find() メソッドを使用します。
このメソッドはクエリ(Query)オブジェクトを受け取ります。空のままにすると、コレクション内のすべてのドキュメントが返されます。
コード例
// posts コレクションのすべてのドキュメントを取得する
db.posts.find()1.2 findOne()
ドキュメントを 1 つだけ選択するには、findOne() メソッドを使用します。
このメソッドもクエリオブジェクトを受け取ります。空のままにすると、最初に見つかったドキュメントを返します。
注意: このメソッドは、最初に見つかった一致するドキュメントのみを返します。
コード例
// posts コレクションから最初の 1 件を取得する
db.posts.findOne()2. データのクエリ(フィルタリング)
データをクエリ(フィルタリング)するには、find() または findOne() メソッドにクエリ条件を含めます。
コード例
// category が "News" のドキュメントのみを検索する
db.posts.find( {category: "News"} )3. プロジェクション (Projection)
どちらの検索メソッドも、プロジェクション(Projection) と呼ばれる第 2 パラメータを受け取ることができます。
このパラメータは、結果にどのフィールド(Field)を含めるかを記述するオブジェクトです。
注意: このパラメータはオプションです。省略した場合は、すべてのフィールドが結果に含まれます。
3.1 実行例
以下の例では、結果に title と date フィールドのみを表示します。
コード例
// title と date フィールドのみを取得する(第 1 引数は空のクエリ)
db.posts.find({}, {title: 1, date: 1})実行結果を確認すると、_id フィールドも含まれていることがわかります。このフィールドは、明示的に除外しない限り常に含まれます。
フィールドを含めるには 1 を、除外するには 0 を使用します。
3.2 _id フィールドの除外
今度は、_id フィールドを除外してみましょう。
コード例
// _id を除外し、title と date のみを表示する
db.posts.find({}, {_id: 0, title: 1, date: 1})3.3 特定のフィールドの除外
重要なルール: 同じオブジェクト内で 0 と 1 を混在させることはできません。唯一の例外は _id フィールドです。
基本的には「含めたいフィールドのみを指定する」か「除外したいフィールドのみを指定する」かのどちらか一方を行う必要があります。
ここでは、category フィールドを除外してみます。それ以外のすべてのフィールドは結果に含まれます。
コード例
// category フィールドのみを除外して取得する
db.posts.find({}, {category: 0})3.4 エラーが発生するケース
同じオブジェクト内で 0 と 1 の両方を指定しようとすると、エラーが発生します。
コード例(エラー)
// title を含めて date を除外しようとするとエラーになる
db.posts.find({}, {title: 1, date: 0})