sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $toObjectId

Fra MongoDB 4.0 kan du bruge $toObjectId aggregeringspipeline-operatør for at konvertere en streng til et ObjectId.

Strengen skal være en hexadecimal streng med længden 24.

Eksempel

Antag, at vi har en samling kaldet foo og det indeholder følgende dokument:

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

Vi kan bruge $toObjectId operatør for at konvertere bar felt til et ObjectId.

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

Resultat:

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

Nu er strengen blevet konverteret til et ObjectId som angivet.

Fejl

Ovenstående eksempel fungerede, fordi vi leverede en hexadecimal streng med længde 24 til $toObjectId operatør.

Her er, hvad der sker, når vi angiver en værdi, der ikke er en hexadecimal streng med længden 24:

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

Resultat:

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

Denne fejl standser hele aggregeringsoperationen og giver en grim fejl.

En alternativ fremgangsmåde er at bruge $convert operator i stedet for $toObjectId . $convert operator giver dig mulighed for at håndtere fejl uden at påvirke hele aggregeringsoperationen.

$toObjectId operator svarer til at bruge $convert operatør for at konvertere en værdi til et ObjectId.

Her er det samme eksempel med $convert :

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

Resultat:

{ "result" : "An error occurred" } 

Brug af $convert gav os mulighed for at angive den fejlmeddelelse, der skulle bruges, når fejlen opstod, og det stoppede ikke hele aggregeringsoperationen.

Se MongoDB $convert for flere eksempler.


  1. Sortere ved hjælp af MongoEngine?

  2. Almindelige MongoDB-interviewspørgsmål

  3. MongoServer.State-ækvivalent i 2.0-driveren

  4. Hvordan får man nøglen fra værdi i nøgle/værdipar i redis butiksklient?