Definición
Nuevo en la versión 8.3.
Generar un nuevo número aleatorio ObjectId() value.
Usar $createObjectId para generar valores ObjectId únicos en una canalización de agregación o una actualización basada en expresiones.
Por ejemplo, puede generar nuevos campos de identificación o reemplazar los id valores existentes para que otras etapas puedan distinguir entre documentos. Esto incluye operadores que dependen de un _id valor estable,$graphLookup como.
Sintaxis
$createObjectId tiene la siguiente sintaxis:
{ $createObjectId: { } }
Nota
Debes usar un objeto vacío ({}) como argumento.
Comportamiento
$createObjectId Se comporta de la siguiente manera:
Argument | Comportamiento |
|---|---|
| Devuelve un nuevo valor aleatorio de tipo BSON. |
Cualquier otro valor | La operación falla con |
Tip
Para convertir un valor existente en un ObjectId,$toObjectId utilice.
Ejemplo
Los ejemplos de esta página utilizan datos del conjunto de datos de muestra sample_mflix. Para obtener más información sobre cómo cargar este conjunto de datos en la implementación autogestionada de MongoDB, consultar Cargar el conjunto de datos de muestra. Si se realizó alguna modificación en las bases de datos de muestra, es posible que se deban descartar y volver a crear las bases de datos para ejecutar los ejemplos de esta página.
Generar identificadores en una vista
Este ejemplo agrega valores ObjectId a una vista para que otras etapas de agregación puedan confiar en un _id valor estable.
En la base de datos sample_mflix, cree una vista sobre la colección movies que oculte el campo _id original:
db.createView( "moviesView", "movies", [ { $project: { _id: 0, title: 1, cast: 1 } } ] )
Las etapas que dependen de _id no se comportan como se espera con esta vista porque los documentos ya no tienen un _id campo. Por ejemplo, una etapa de recorrido de grafos como $graphLookup usa _id internamente para rastrear los documentos visitados y eliminar los resultados duplicados.
Para usar esta vista con etapas que esperan un identificador estable, cree una segunda vista que agregue un _id campo único $createObjectId con:
db.createView( "moviesViewWithId", "moviesView", [ { $project: { _id: { $createObjectId: {} }, // unique id title: 1, cast: 1 } } ] )
Ahora puede ejecutar una agregación que trate cada documento en moviesViewWithId como un nodo distinto. Por ejemplo, la siguiente etapa encuentra otras películas que comparten miembros del reparto con cada $graphLookup película:
db.movies.aggregate( [ { $graphLookup: { from: "moviesViewWithId", startWith: "$cast", connectFromField: "cast", connectToField: "cast", as: "relatedMovies" } } ] )
En este proceso, garantiza que cada documento en la vista tenga un valor ObjectId$createObjectId único _id en. Las etapas que dependen de un identificador estable pueden entonces distinguir correctamente entre los documentos.