MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $toObjectId

Dari MongoDB 4.0, Anda dapat menggunakan $toObjectId operator pipeline agregasi untuk mengonversi string menjadi ObjectId.

String harus berupa string heksadesimal dengan panjang 24.

Contoh

Misalkan kita memiliki koleksi yang disebut foo dan berisi dokumen berikut:

{ "_id" : 1, "bar" : "6008c9a5c8eb4369cf6ad9cc" } 

Kita dapat menggunakan $toObjectId operator untuk mengonversi bar bidang ke ObjectId.

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          bar: { $toObjectId: "$bar" }
        }
    }
  ]
).pretty()

Hasil:

{ "bar" : ObjectId("6008c9a5c8eb4369cf6ad9cc") } 

Sekarang string telah diubah menjadi ObjectId seperti yang ditentukan.

Kesalahan

Contoh di atas berhasil karena kami menyediakan string heksadesimal dengan panjang 24 ke $toObjectId operator.

Inilah yang terjadi saat kami memberikan nilai yang bukan string heksadesimal dengan panjang 24:

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          bar: { $toObjectId: "$_id" }
        }
    }
  ]
).pretty()

Hasil:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "Unsupported conversion from double to objectId in $convert with no onError value",
	"code" : 241,
	"codeName" : "ConversionFailure"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1

Kesalahan ini menghentikan seluruh operasi agregasi, dan memberikan kesalahan yang tampak buruk.

Pendekatan alternatif adalah dengan menggunakan $convert operator alih-alih $toObjectId . $convert operator memungkinkan Anda menangani kesalahan tanpa memengaruhi keseluruhan operasi agregasi.

$toObjectId operator sama dengan menggunakan $convert operator untuk mengonversi nilai menjadi ObjectId.

Berikut contoh yang sama menggunakan $convert :

db.foo.aggregate(
  [
    {
      $project:
        { 
          _id: 0,
          result: 
          {
            $convert: { 
              input: "$_id", 
              to: "objectId",
              onError: "An error occurred",
              onNull: "Input was null or empty" 
            }
          }
        }
    }
  ]
)

Hasil:

{ "result" : "An error occurred" } 

Menggunakan $convert memungkinkan kami untuk menentukan pesan kesalahan yang akan digunakan saat kesalahan terjadi, dan itu tidak menghentikan seluruh operasi agregasi.

Lihat MongoDB $convert untuk lebih banyak contoh.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB untuk Setiap()

  2. Pemikiran MongoDB dan PostgreSQL

  3. Luwak findOneAndUpdate dan runValidators tidak berfungsi

  4. Apakah ada alasan mengapa saya harus/tidak boleh menggunakan ObjectId di url RESTful saya

  5. Bagaimana mengonversi string ke objectId di LocalField untuk $lookup Mongodb