$toObjectId(集計)
定義
$toObjectId
値を
ObjectId()
に変換します。値を ObjectId に変換できない場合は、$toObjectId
でエラーが発生します。値が null または欠落している場合、$toObjectId
は null を返します。$toObjectId
の構文は次のとおりです。{ $toObjectId: <expression> } $toObjectId
は任意の有効な式を受け入れます。$toObjectId
は次の$convert
式の省略形です。{ $convert: { input: <expression>, to: "objectId" } }
動作
下表には、ObjectId に変換できる入力型が一覧表示されています。
入力タイプ | 動作 |
---|---|
文字列 | 長さ 24 の 16 進文字列の ObjectId を返します。 長さ 24 の 16 進文字列ではない文字列値を変換することはできません。 |
次の表で、日付への変換例の一部を示します。
例 | 結果 |
---|---|
{$toObjectId: "5ab9cbfa31c2ab715d42129e"} | ObjectId("5ab9cbfa31c2ab715d42129e") |
{$toObjectId: "5ab9cbfa31c2ab715d42129"} | エラー |
例
次のドキュメントを使用してコレクション orders
を作成します。
db.orders.insertMany( [ { _id: "5ab9cbe531c2ab715d42129a", item: "apple", qty: 10 }, { _id: ObjectId("5ab9d0b831c2ab715d4212a8"), item: "pie", qty: 5 }, { _id: ObjectId("5ab9d2d331c2ab715d4212b3"), item: "ice cream", qty: 20 }, { _id: "5ab9e16431c2ab715d4212b4", item: "almonds", qty: 50 }, ] )
orders
コレクションに対する次の集計操作は、値で並べ替える前に _id
を ObjectId に変換します。
// Define stage to add convertedId field with converted _id value idConversionStage = { $addFields: { convertedId: { $toObjectId: "$_id" } } }; // Define stage to sort documents by the converted qty values sortStage = { $sort: { "convertedId": -1 } }; db.orders.aggregate( [ idConversionStage, sortStage ] )
この操作により、次のドキュメントが返されます。
{ _id: '5ab9e16431c2ab715d4212b4', item: 'almonds', qty: 50, convertedId: ObjectId("5ab9e16431c2ab715d4212b4") }, { _id: ObjectId("5ab9d2d331c2ab715d4212b3"), item: 'ice cream', qty: 20, convertedId: ObjectId("5ab9d2d331c2ab715d4212b3") }, { _id: ObjectId("5ab9d0b831c2ab715d4212a8"), item: 'pie', qty: 5, convertedId: ObjectId("5ab9d0b831c2ab715d4212a8") }, { _id: '5ab9cbe531c2ab715d42129a', item: 'apple', qty: 10, convertedId: ObjectId("5ab9cbe531c2ab715d42129a") }
注意
変換操作でエラーが発生した場合、集計操作は停止し、エラーがスローされます。この動作をオーバーライドするには、代わりに $convert
を使用します。