sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $toObjectId

Från MongoDB 4.0 kan du använda $toObjectId aggregeringspipeline-operator för att konvertera en sträng till ett ObjectId.

Strängen måste vara en hexadecimal sträng med längden 24.

Exempel

Anta att vi har en samling som heter foo och den innehåller följande dokument:

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

Vi kan använda $toObjectId operatör för att konvertera bar till ett ObjectId.

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

Resultat:

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

Nu har strängen konverterats till ett ObjectId som specificerats.

Fel

Exemplet ovan fungerade eftersom vi gav en hexadecimal sträng med längden 24 till $toObjectId operatör.

Så här händer när vi tillhandahåller ett värde som inte är en hexadecimal sträng 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

Detta fel stoppar hela aggregeringsoperationen och ger ett otäckt utseendefel.

Ett alternativt tillvägagångssätt är att använda $convert operator istället för $toObjectId . $convert operatorn låter dig hantera fel utan att påverka hela aggregeringsoperationen.

$toObjectId operatorn är motsvarigheten till att använda $convert operatör för att konvertera ett värde till ett ObjectId.

Här är samma exempel 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" } 

Använder $convert tillät oss att ange vilket felmeddelande som skulle användas när felet inträffade, och det stoppade inte hela aggregeringsoperationen.

Se MongoDB $convert för fler exempel.


  1. Hur man kontrollerar anslutningen till mongodb

  2. Exportera mongodb aggregeringsramresultat till en ny samling

  3. Hur laddar man in 100 miljoner poster i MongoDB med Scala för prestandatestning?

  4. Autentisering under anslutning till MongoDB-serverinstans med Java