$documents(集計)
定義
構文
$documents
ステージの形式は次のとおりです。
{ $documents: <expression> }
制限
$documents
はデータベースレベルの集計パイプラインでのみ使用できます。集計パイプラインの最初のステージとして
$documents
を使用する必要があります。
動作
$documents
は、オブジェクトの配列に変換される任意の有効な 式 を受け入れます。 これには以下が含まれます。
現在のドキュメントに解決されない式$myField
や$$ROOT
など)はエラーになります。
例
パイプライン ステージのテスト
テスト コレクションを作成せずに、パイプライン ステージのテストとデバッグ データを作成します。
db.aggregate( [ { $documents: [ { x: 10 }, { x: 2 }, { x: 5 } ] }, { $bucketAuto: { groupBy: "$x", buckets: 4 } } ] )
集計式ではコレクションを指定しません。 強調表示された$documents
ステージの入力データを$bucketAuto
ステージへの入力として使用します。
[ { _id: { min: 2, max: 5 }, count: 1 }, { _id: { min: 5, max: 10 }, count: 1 }, { _id: { min: 10, max: 10 }, count: 1 } ]
$documents
$lookup
ステージでの ステージの使用
$documents
を使用してコレクション内のドキュメントを他のデータと相関させ、 $lookup
の出力を変更します。
locations
コレクションを作成します。
db.locations.insertMany( [ { zip: 94301, name: "Palo Alto" }, { zip: 10019, name: "New York" } ] )
ドキュメントを変換するためのデータソースとして$documents
を使用します。
db.locations.aggregate( [ { $match: {} }, { $lookup: { localField: "zip", foreignField: "zip_id", as: "city_state", pipeline: [ { $documents: [ { zip_id: 94301, name: "Palo Alto, CA" }, { zip_id: 10019, name: "New York, NY" } ] } ] } } ] )
出力は、 locations
コレクション内のデータと$documents
パイプライン ステージ内の値を相関させます。
[ { _id: ObjectId("618949d60f7bfd5f5689490d"), zip: 94301, name: 'Palo Alto', city_state: [ { zip_id: 94301, name: 'Palo Alto, CA' } ] }, { _id: ObjectId("618949d60f7bfd5f5689490e"), zip: 10019, name: 'New York', city_state: [ { zip_id: 10019, name: 'New York, NY' } ] } ]
zip
フィールドはzip_id
フィールドに対応しますas
パラメータは新しい出力フィールドを作成します
この$lookup
構文を使用するサブクエリの詳細については、「簡潔な構文を使用した相関サブクエリ 」を参照してください。