Definición
Sintaxis
La etapa $documents tiene el siguiente formato:
{ $documents: <expression> }
Limitaciones
Solo puede utilizar
$documentsen una canalización de agregación a nivel de base de datos.Debe utilizar
$documentscomo la primera etapa de una secuencia de agregación.
Consulta a continuación ejemplos de uso.
Comportamiento
$documents Acepta cualquier expresión válida que se resuelva en una matriz de objetos. Esto incluye:
variables del sistema, como
$$NOWor$$SEARCH_META$letexpresionesvariables en el alcance de las
$lookupexpresiones
Las expresiones que no se resuelven en un documento actual, como $myField $$ROOTo, generarán un error.
Ejemplos
Probar una etapa de la tubería
Cree datos de prueba y depuración para una etapa de la canalización sin crear colecciones de pruebas.
db.aggregate( [ { $documents: [ { x: 10 }, { x: 2 }, { x: 5 } ] }, { $bucketAuto: { groupBy: "$x", buckets: 4 } } ] )
La expresión de agregación no especifica una colección. Utiliza los datos de entrada de $documents la etapa resaltada como entrada para la $bucketAuto etapa.
[ { _id: { min: 2, max: 5 }, count: 1 }, { _id: { min: 5, max: 10 }, count: 1 }, { _id: { min: 10, max: 10 }, count: 1 } ]
Utilice una $documents etapa en una $lookup etapa
Correlacione documentos de una colección con otros datos usando para $documents $lookup modificar la salida.
Crea la colección locations.
db.locations.insertMany( [ { zip: 94301, name: "Palo Alto" }, { zip: 10019, name: "New York" } ] )
Utilice como fuente de datos para transformar los $documents documentos.
db.locations.aggregate( [ { $match: {} }, { $lookup: { localField: "zip", foreignField: "zip_id", as: "city_state", pipeline: [ { $documents: [ { zip_id: 94301, name: "Palo Alto, CA" }, { zip_id: 10019, name: "New York, NY" } ] } ] } } ] )
La salida correlaciona los datos de la locations colección con los valores de la $documents etapa de canalización.
[ { _id: ObjectId("618949d60f7bfd5f5689490d"), zip: 94301, name: 'Palo Alto', city_state: [ { zip_id: 94301, name: 'Palo Alto, CA' } ] }, { _id: ObjectId("618949d60f7bfd5f5689490e"), zip: 10019, name: 'New York', city_state: [ { zip_id: 10019, name: 'New York, NY' } ] } ]
El campo
zipcorresponde al campozip_idEl parámetro
ascrea un nuevo campo de salida
Para usar el controlador MongoDB.NET/C# para agregar una $documents etapa a una canalización de agregación, llame a Documents()método en un PipelineDefinition objeto.
El siguiente ejemplo crea una etapa de pipeline que crea tres documentos:
var documentArray = new[] { new BsonDocument {{ "title", "The Shawshank Redemption" }}, new BsonDocument {{ "title", "Back to the Future" }}, new BsonDocument {{ "title", "Jurassic Park" }}, }; var pipeline = new EmptyPipelineDefinition<NoPipelineInput>() .Documents(documentArray);
Para utilizar el controlador de MongoDB Node.js para agregar una etapa de $documents a una canalización de agregación, utilice el Operador $documents en un objeto de canalización.
El siguiente ejemplo crea una etapa de canalización que genera tres documentos. A continuación, ejecuta la canalización de agregación:
const pipeline = [ { $documents: [ { "title": "The Shawshank Redemption" }, { "title": "Back to the Future" }, { "title": "Jurassic Park" } ] } ]; const cursor = collection.aggregate(pipeline); return cursor;
Obtén más información
Para obtener detalles sobre las subconsultas que utilizan la sintaxis,$lookup consulte Subconsultas correlacionadas que utilizan sintaxis concisa.