MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB $toObjectId

Z MongoDB 4.0 możesz użyć $toObjectId operator potoku agregacji do konwersji ciągu na ObjectId.

Ciąg musi być ciągiem szesnastkowym o długości 24.

Przykład

Załóżmy, że mamy kolekcję o nazwie foo i zawiera następujący dokument:

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

Możemy użyć $toObjectId operator do konwersji bar pole do ObjectId.

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

Wynik:

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

Teraz ciąg został przekonwertowany na podany identyfikator obiektu.

Błędy

Powyższy przykład zadziałał, ponieważ dostarczyliśmy ciąg szesnastkowy o długości 24 do $toObjectId operatora.

Oto, co się dzieje, gdy dostarczamy wartość, która nie jest ciągiem szesnastkowym o długości 24:

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

Wynik:

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

Ten błąd zatrzymuje całą operację agregacji i zapewnia paskudnie wyglądający błąd.

Alternatywnym podejściem jest użycie $convert operator zamiast $toObjectId . $convert operator umożliwia obsługę błędów bez wpływu na całą operację agregacji.

$toObjectId operator jest odpowiednikiem użycia $convert operator do konwersji wartości na ObjectId.

Oto ten sam przykład z użyciem $convert :

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

Wynik:

{ "result" : "An error occurred" } 

Korzystanie z $convert pozwoliło nam określić komunikat o błędzie, który zostanie użyty, gdy wystąpi błąd, i nie zatrzymało całej operacji agregacji.

Zobacz MongoDB $convert więcej przykładów.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Różnica między MongoDB a Mongoose

  2. Zamawianie zestawu wyników losowo w mongo

  3. Zapytanie Java/MongoDB według daty

  4. Przechowywanie pliku w MongoDB za pomocą Multer w Mongoose

  5. NoSQL (MongoDB) vs Lucene (lub Solr) jako Twoja baza danych