MongoDB 速習チュートリアル

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 実行例

以下の例では、結果に titledate フィールドのみを表示します。

コード例

// 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})