Definición
Sintaxis
La $documents el escenario tiene el siguiente formulario:
{ $documents: <expression> }
Limitaciones
Solo puedes usar
$documentsen una pipeline de agregación a nivel de base de datos.Debes usar
$documentscomo la primera etapa de un pipeline 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, tales como
$$NOWor$$SEARCH_META$letexpresionesvariables en el ámbito de expresiones
$lookup
Las expresiones que no se resuelven en un documento actual, como $myField o $$ROOT, darán lugar a un error.
Ejemplos
Probe una etapa de pipeline
Cree datos de pruebas y depuración para una etapa del pipeline 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 en la etapa destacada $documents como entrada para la etapa $bucketAuto.
[ { _id: { min: 2, max: 5 }, count: 1 }, { _id: { min: 5, max: 10 }, count: 1 }, { _id: { min: 10, max: 10 }, count: 1 } ]
Utiliza una Fase $documents en una Fase $lookup
Correlaciona los documentos en una colección con otros datos usando $documents para modificar la salida de $lookup.
Crea la colección locations.
db.locations.insertMany( [ { zip: 94301, name: "Palo Alto" }, { zip: 10019, name: "New York" } ] )
Utiliza $documents como fuente de datos para transformar los 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 colección locations con los valores en la etapa de pipeline $documents.
[ { _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 pipeline que crea tres documentos. El ejemplo luego 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, consulta Subconsultas correlacionadas que utilizan sintaxis concisa.