MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $toObjectId

От MongoDB 4.0 можете да използвате $toObjectId оператор на конвейер за агрегиране за преобразуване на низ в ObjectId.

Низът трябва да е шестнадесетичен низ с дължина 24.

Пример

Да предположим, че имаме колекция, наречена foo и съдържа следния документ:

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

Можем да използваме $toObjectId оператор за конвертиране на bar поле към ObjectId.

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

Резултат:

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

Сега низът е преобразуван в ObjectId, както е посочено.

Грешки

Горният пример работи, защото предоставихме шестнадесетичен низ с дължина 24 на $toObjectId оператор.

Ето какво се случва, когато предоставим стойност, която не е шестнадесетичен низ с дължина 24:

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

Резултат:

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

Тази грешка спира цялата операция на агрегиране и предоставя неприятна грешка.

Алтернативен подход е да използвате $convert оператор вместо $toObjectId . $convert операторът ви позволява да обработвате грешки, без да засягате цялата операция на агрегиране.

$toObjectId операторът е еквивалент на използването на $convert оператор за преобразуване на стойност в ObjectId.

Ето същия пример с помощта на $convert :

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

Резултат:

{ "result" : "An error occurred" } 

Използване на $convert ни позволи да посочим съобщението за грешка, което да използваме при възникване на грешката, и то не спря цялата операция на агрегиране.

Вижте MongoDB $convert за още примери.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:Фатална грешка:Клас „MongoClient“ не е намерен

  2. Разлика между Find и FindAsync

  3. Актуализирайте стойност в MongoDB въз основа на текущата й стойност

  4. Не мога да инсталирам mongodb doctrine в symfony2 с composer

  5. Сървърът на MongoDB все още може да бъде достъпен без идентификационни данни