定義
バージョン8.3の新機能。
新しいランダムなObjectId() 値を生成します。
$createObjectIdを使用して、集計パイプラインまたは式ベースのアップデートで一意の ObjectId 値を生成します。
例では、新しい識別子フィールドを生成したり、既存のid 値を置き換えたりすることで、他のステージがドキュメントを区別できるようになります。これには、_id など、安定した$graphLookup 値に依存する演算子が含まれます。
構文
$createObjectId の構文は次のとおりです。
{ $createObjectId: { } }
注意
引数には空のオブジェクト({})を使用する必要があります。
動作
$createObjectId は、次のように動作します。
Argument | 動作 |
|---|---|
| |
その他の値 | 操作は |
Tip
既存の値を ObjectId に変換するには、$toObjectId を使用します。
例
このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードする を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
ビューでの識別子の生成
この例では、ビューに ObjectId 値を追加することで、他の集計ステージは安定した _id値に依存できます。
sample_mflixデータベースに、元の _idフィールドを非表示にする moviesコレクションに対するビューを作成します。
db.createView( "moviesView", "movies", [ { $project: { _id: 0, title: 1, cast: 1 } } ] )
_id_idドキュメントに$graphLookup _idフィールドがなくなりました。このビューでは、 に依存するステージは期待どおりに動作しません。例、 のようなグラフ走査ステージでは、訪問されたドキュメントを追跡し、結果を重複除外するために内部的に を使用します。
安定した識別子を必要とするステージでこのビューを使用するには、 を持つ一意の フィールドを追加する 2 番目のビューを作成します。_id$createObjectId
db.createView( "moviesViewWithId", "moviesView", [ { $project: { _id: { $createObjectId: {} }, // unique id title: 1, cast: 1 } } ] )
moviesViewWithId内の各ドキュメントを個別のノードとして扱う集計を実行できるようになりました。例、次の ステージでは、各映画とキャスト$graphLookup メンバーを共有する他の映画が検索されます。
db.movies.aggregate( [ { $graphLookup: { from: "moviesViewWithId", startWith: "$cast", connectFromField: "cast", connectToField: "cast", as: "relatedMovies" } } ] )
このパイプラインでは、 は ビュー内の各ドキュメントが に一意の$createObjectId ObjectId_id 値を持つことを確認します。安定識別子に依存するステージでは、ドキュメントを正しく区別できるようになります。