sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $toObjectId

Od MongoDB 4.0 můžete použít $toObjectId operátor agregačního kanálu pro převod řetězce na ObjectId.

Řetězec musí být hexadecimální řetězec délky 24.

Příklad

Předpokládejme, že máme kolekci nazvanou foo a obsahuje následující dokument:

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

Můžeme použít $toObjectId operátor pro převod bar pole na ObjectId.

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

Výsledek:

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

Nyní byl řetězec převeden na ObjectId, jak je uvedeno.

Chyby

Výše uvedený příklad fungoval, protože jsme do $toObjectId poskytli hexadecimální řetězec délky 24 operátor.

Co se stane, když poskytneme hodnotu, která není hexadecimálním řetězcem o délce 24:

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

Výsledek:

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

Tato chyba zastaví celou operaci agregace a způsobí ošklivě vypadající chybu.

Alternativním přístupem je použití $convert operátor namísto $toObjectId . $convert operátor vám umožňuje ošetřit chyby bez ovlivnění celé operace agregace.

$toObjectId operátor je ekvivalentem použití $convert operátor pro převod hodnoty na ObjectId.

Zde je stejný příklad s použitím $convert :

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

Výsledek:

{ "result" : "An error occurred" } 

Pomocí $convert nám umožnilo specifikovat chybovou zprávu, která se má použít, když dojde k chybě, a nezastavilo celou operaci agregace.

Viz MongoDB $convert pro další příklady.


  1. Databáze grafů vs. databáze dokumentů vs. Triplestores

  2. MongoDB Regular Expression Search – začíná používáním javascriptového ovladače a NodeJS

  3. Můžeme se připojit k Redis?

  4. Vrácení prvků vnitřního pole z více dokumentů v seřazené podobě