Docs Menu
Docs Home
/ / /
Node.js ドライバー
/ / /

返すフィールドを指定する

項目一覧

  • Overview
  • サンプル ドキュメント
  • シングル フィールド
  • 複数のフィールド

プロジェクションを使用して、読み取り操作によって返されるドキュメントにどのフィールドが表示されるかを制御します。多くのリクエストは特定のフィールドのみを必要とするため、プロジェクションは不要なネットワーク帯域幅の使用を制限するのに役立ちます。プロジェクションは、次の 2 つの方法で機能します。

  • 値が 1 のフィールドを明示的に含めます。これには、指定されていないすべてのフィールドを暗黙的に除外するという副作用があります。

  • 値が 0 のフィールドを暗黙的に除外します。これには、指定されていないすべてのフィールドが暗黙的に含まれるという副作用があります。

これらの 2 つのプロジェクション方法は相互に排他的です。つまり、フィールドを明示的に含める場合は、フィールドを明示的に除外することはできません。また、その逆も同様です。

このガイドの例えに従うには、次のコード スニペットを使用して、完了を説明するドキュメントをmyDB.fruitsコレクションに挿入します。

const myDB = client.db("myDB");
const myColl = myDB.collection("fruits");
await myColl.insertMany([
{ "_id": 1, "name": "apples", "qty": 5, "rating": 3 },
{ "_id": 2, "name": "bananas", "qty": 7, "rating": 1 },
{ "_id": 3, "name": "oranges", "qty": 6, "rating": 2 },
{ "_id": 4, "name": "avocados", "qty": 3, "rating": 5 },
]);

注意

クエリ操作により、一致するドキュメントを含むカーソルへの参照が返される場合があります。 カーソルに保存されているデータを調べる方法については、「 カーソルの基礎ページ 」を参照してください。

次のクエリでは、各ドキュメントの name フィールドのみを返すようにプロジェクションを渡します。

// return only* the name field
const projection = { name: 1 };
const cursor = myColl.find().project(projection);
for await (const doc of cursor) {
console.dir(doc);
}

プロジェクション ドキュメントでは、name1 の値が指定されています。これは、返された各ドキュメントの name フィールドを結果に含めるように操作に指示し、qty フィールドと rating フィールドを除外するようにします。このプロジェクションを find() に渡すと、クエリ ドキュメントは空で、ソートドキュメントは指定しない状態で、次の結果が得られます。

{ "_id": 1, "name": "apples" }
{ "_id": 2, "name": "bananas" }
{ "_id": 3, "name": "oranges" }
{ "_id": 4, "name": "avocados" }

このプロジェクションには name フィールドのみが明示的に含まれていましたが、クエリは _id フィールドも返しました。

_id フィールドは、明示的に指定されない限り、すべてのクエリに常に含まれるため、特別なケースです。これは、_id が各ドキュメントのユニークな識別子であり、クエリの構築時によく使用されるプロパティであるためです。movies コレクション データは、このプロパティが必要な理由を示しています。映画のリメイクなど、2 つ以上の映画が同じタイトルを共有する場合があります。このため、特定の映画を確実に参照するには、ユニークな _id 値が必要です。_id は、プロジェクションにおける相互に排他的な包含や除外動作の唯一の例外です。返されるドキュメントに _id が存在しないようにしたい場合は、他のフィールドを明示的に含める場合でも、_id を明示的に除外できます。

// return only the name field
const projection = { _id: 0, name: 1 };
const cursor = myColl.find().project(projection);
for await (const doc of cursor) {
console.dir(doc);
}

プロジェクション ドキュメントでは、name1 の値が指定され、_id0 の値が指定されています。これは、返された各ドキュメントの name フィールドを結果に含め_idqty、および rating フィールドを除外するように指示します。このプロジェクションを空のクエリ ドキュメントとソート ドキュメントなしで find() に渡すと、次の結果が得られます。

{ "name": "apples" }
{ "name": "bananas" }
{ "name": "oranges" }
{ "name": "avocados" }

また、プロジェクションに含めるフィールドを複数指定することもできます。注記: プロジェクションでフィールドを指定する順序によって、返される順序は変更されません。

const projection = { _id: 0, rating: 1, name: 1 };
const cursor = myColl.find().project(projection);
for await (const doc of cursor) {
console.dir(doc);
}

プロジェクションに含める 2 つのフィールドを識別するこの例では、次の結果が得られます。

{ "name": "apples", "rating": 3 }
{ "name": "bananas", "rating": 1 }
{ "name": "oranges", "rating": 2 }
{ "name": "avocados", "rating": 5 }

その他のプロジェクション例については、「クエリから返されるプロジェクト フィールドに関する MongoDB マニュアル ページ」を参照してください。

戻る

返される結果の数を制限する