Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$documents (etapa de agregación)

$documents

Novedades en la versión 6.0.

Devuelve documentos literales desde valores de entrada.

La $documents el escenario tiene el siguiente formulario:

{ $documents: <expression> }
  • Solo puedes usar $documents en una pipeline de agregación a nivel de base de datos.

  • Debes usar $documents como la primera etapa de un pipeline de agregación.

Consulta a continuación ejemplos de uso.

$documents Acepta cualquier expresión válida que se resuelva en una matriz de objetos. Esto incluye:

  • variables del sistema, tales como $$NOW or $$SEARCH_META

  • $let expresiones

  • variables 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.

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 }
]

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 zip corresponde al campo zip_id

  • El parámetro as crea 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;

Para obtener detalles sobre las subconsultas que utilizan la sintaxis $lookup, consulta Subconsultas correlacionadas que utilizan sintaxis concisa.

Volver

$densify

En esta página