Cómo utiliza MongoDB $unwind

Cómo utiliza MongoDB $unwind

  • Orquestación
6 min de lectura Actualizado Dec 2, 2020

Puntos clave: MongoDB $unwind están un operador que deconstruye los campos de los arreglos en los documentos, creando documentos de salida separados para cada elemento del array con el fin de mejorar la legibilidad de los datos y facilitar operaciones como agrupación y ordenación.

  • $unwind simplifica documentos complejos en entradas individuales.
  • Gestiona campos no relacionados con un array como arrays de un solo elemento desde MongoDB 3.2.

MongoDB $unwind están una herramienta útil para realizar agregación en MongoDB. Veamos $unwind y cómo utiliza.

¿Qué están $unwind MongoDB?

El operador de $unwind MongoDB están utiliza para deconstruir un campo de array en un documento y Crea documentos de salida separados para cada elemento del array. La única diferencia entre el documento de entrada y los documentos de salida están que, en los documentos de salida, el valor del campo del array están reemplazado por un solo elemento del array de documentos de entrada. te Ve esto mientras te repaso este ejemplo. MongoDB $unwind transforma documentos complejos en documentos más simples, lo que aumenta la legibilidad y la comprensión. Esto también nos permite realizar operaciones adicionales, como agrupar y ordenar en la salida resultante.

La sintaxis básica de $unwind operador

    { $unwind: "$" }
    {$unwind: { path : "$", }}

Aquí, te debe prefijar el camino con el signo de dólar "$" para una operación de $unwind exitosa. A continuación, demostraremos una operación $unwind sencilla usando nuestra colección "detalles del vehículo". Primero, echemos un vistazo a nuestra colección.

    db.vehicledetails.find().pretty()

Resultado:

A continuación, utiliza al operador de $unwind que descomponga el campo del array "model_year" y que Crea documentos separados para cada año.

    db.vehicledetails.aggregate([{$unwind : "$model_year" }]).pretty()

Resultado:

Como se muestra en la salida anterior, están crea un nuevo documento para cada elemento del array "model_year".

Cómo funciona $unwind con caminos de campo que no son de arrays

Antes de MongoDB 3.2, si un campo que no sea de un array están definido como el camino en el operador $unwind, habría dado lugar a un error. A partir de MongoDB 3.2, cualquier campo que no sea de un array que no resuelva a un array ausente, nulo o vacío será tratado como un array de un solo elemento. Este siguiente ejemplo muestra cómo el operador $unwind maneja un array de un solo elemento.

    db.vehicledetails.aggregate([{$unwind : "$make" }]).pretty()

Resultado:

Aquí, la operación $unwind crea con éxito un único documento de salida al considerar el campo "Haz" como un solo array de elementos.

Campo ausente como camino

El operador $unwind no generará ninguna salida si el camino especificado están un campo faltante/no disponible. No habrá error porque el $unwind ignorará el documento de entrada.

    db.vehicledetails.aggregate([{$unwind : "$use" }]).pretty()

Resultado:

En la operación anterior, el camino proporcionado para el operador de $unwind están el campo "utiliza". Sin embargo, el documento de entrada están ignorado, ya que no están campo "utiliza" en el documento de entrada.

$unwind opciones de operador

El operador $unwind puede usarse con dos argumentos opcionales, que son incluir ArrayIndex y preserveNullAndEmptyArrays. Esta sección mostrará cómo cada opción afecta al resultado de una operación $unwind. De nuevo, utiliza la colección "vehicledetails" con documentos adicionales para demostrar la funcionalidad de los argumentos opcionales.

    db.vehicledetails.find().pretty()

Resultado:

Cuando te realiza $unwind operación sobre el conjunto de datos anterior con el campo "model_year", la salida consistirá en cinco resultados. Vamos a Ve esto en este ejemplo:

    db.vehicledetails.aggregate([{$unwind : "$model_year" }]).pretty()

Resultado:

opción includeArrayIndex

La opción includeArrayIndex están usa para obtener el índice del array con la salida de la operación $unwind. Podemos Define un campo en la sintaxis "includeArrayIndex" para Obtén el índice del array de cada documento de salida. Si el campo del array están null, esto resultará en un valor nulo en el campo definido por el usuario, y si están un array vacío, se ignorará porque no son elementos en ese array. En el siguiente ejemplo, el campo "model_year" están utilizado para realizar la operación de $unwind, y el campo "vehicleIndex" definido por el usuario están para capturar el índice del array.

    db.vehicledetails.aggregate([{$unwind : {path: "$model_year", includeArrayIndex: "vehicleIndex" }}]).pretty()

Resultado:

Opción preserveNullAndEmptyArrays

Definir la opción "preserveNullAndEmptyArrays" en una operación $unwind permite al usuario incluir documentos donde el campo del array están ausente, nulo o un array vacío. La opción "preserveNullAndEmptyArrays" solo acepta argumentos booleanos como verdadero o falso. Vamos a utiliza los documentos dentro de la colección "vehicledetails" para demostrar la opción "preserveNullAndEmptyArrays". Esto resultará en una salida donde todos los arrays faltantes, nulos o vacíos en el campo "model_year" son capturados.

    db.vehicledetails.aggregate([{$unwind : {path: "$model_year", preserveNullAndEmptyArrays: true}}]).pretty()

Resultado:

Agrupación de datos por valores de Unwound

En MongoDB, te puede utiliza el conjunto de datos resultante de una operación de $unwind—valores de desenrollamiento—para transformar aún más el conjunto de datos. La colección "vehiclesalesmain" están utiliza para demostrar cómo combinar $unwind operador con otras funciones.

    db.vehiclesalesmain.find().pretty()

Resultado:

En la siguiente sección, están utiliza la matriz de "colores" para realizar la operación de $unwind. También utiliza el grupo MongoDB y los métodos de ordenación para Obtén el precio medio según los colores del vehículo.

    db.vehiclesalesmain.aggregate([{$unwind: {path: "$colours", preserveNullAndEmptyArrays: true}}, {$group: { _id: "$colours", averagePrice: {$avg: "$price"}}},{$sort: {"averagePrice": -1}}])

Resultado:

Vamos a simplifica la fórmula anterior en varios pasos para Obtén una mejor comprensión del proceso. te puede Ve la sintaxis formateada completa a continuación.

    db.vehiclesalesmain.aggregate([
{
$unwind: {
path: "$colours",
preserveNullAndEmptyArrays: true
}
},
{
$group: {
_id: "$colours",
averagePrice: {
$avg: "$price"
}
}
},
{
$sort: {
"averagePrice": -1
}
}
])

Paso 1

En el primer paso, los documentos de la colección "vehiclesalesmain" son desenrollan usando el campo del array "colours". Luego, los preserveNullAndEmptyArrays están se ponen en true para capturar cualquier array faltante, nulo o vacío en la salida resultante.

    db.vehiclesalesmain.aggregate([{$unwind: {path: "$colours", preserveNullAndEmptyArrays: true}}]).pretty()

Resultado:

Paso 2

En el segundo paso, los documentos resultantes de la operación de $unwind son agrupados mediante el método de grupo MongoDB usando el color, y se calcula el precio medio de cada color están. Sintaxis de agrupamiento:

    {$group: { _id: "$colours", averagePrice: {$avg: "$price"}}}

Sintaxis completa:

    db.vehiclesalesmain.aggregate([{$unwind: {path: "$colours", preserveNullAndEmptyArrays: true}}, {$group: { _id: "$colours", averagePrice: {$avg: "$price"}}}])

Resultado:

Paso 3

Finalmente, el conjunto de datos agrupados se están ordenados en orden descendente usando el método de ordenación de MongoDB. Sintaxis de ordenación:

    {$sort: {"averagePrice": -1}}])

Sintaxis completa:

    db.vehiclesalesmain.aggregate([{$unwind: {path: "$colours", preserveNullAndEmptyArrays: true}}, {$group: { _id: "$colours", averagePrice: {$avg: "$price"}}},{$sort: {"averagePrice": -1}}])

Resultado:

Uso de $unwind en arrays embebidos

Cuando te realiza la operación de $unwind en un array embebido, funcionará igual que en un campo de array normal. La operación $unwind deconstruirá los elementos de cada uno de los arrays embebidos. Usando la colección "vehicleitems", demostraremos cómo funciona el operador $unwind en un array embebido. Veamos la colección "vehicleitems".

    db.vehicleitems.find().pretty()

Resultado:

En la siguiente sección, la operación de $unwind están realiza sobre los documentos anteriores utilizando los arrays embebidos de "elementos".

    db.vehicleitems.aggregate({$unwind: "$items"}).pretty()

Resultado:

Como te puede Ve de los documentos de salida, cada elemento en todos los arrays incrustados de los "elementos" son deconstruido como elementos individuales. te puede deconstruir aún más el conjunto de datos resultante usando el array de "tipo", como hacemos en el siguiente ejemplo. Sintaxis de deconstrucción:

    {$unwind: "$items"},{$unwind: "$items.type"}

Sintaxis completa:

    db.vehicleitems.aggregate([{$unwind: "$items"},{$unwind: "$items.type"},{$project: { _id: 0}}])

Utiliza el operador de proyección para eliminar el campo "objectId" y obtener una salida más limpia. Resultado:

Guía de MongoDB

  1. Resumen de MongoDB: Empezando con MongoDB
  2. Cómo instalar MongoDB en Ubuntu y Mac
  3. Creación de una base de datos en MongoDB
  4. Comandos básicos de MongoDB Shell
  5. MongoDB Compass: Uso de la interfaz gráfica de Mongo
  6. Explicación del Control de Acceso Basado en Roles (RBAC) de MongoDB
  7. Explicación de los operadores de proyección y proyección de MongoDB
  8. Explicación de las funciones agregadas de MongoDB
  9. Ordenación de MongoDB: método y ejemplos de sort()
  10. Uso de operadores de Push & Pull en MongoDB
  11. Cómo utiliza MongoDB $unwind
  12. 23 operadores comunes de consultas de MongoDB y cómo utilizarlos
  13. Ejemplos de consultas de geolocalización de MongoDB
  14. Introducción a las transacciones de MongoDB
  15. Índices de MongoDB: Principales tipos de índices y cómo gestionarlos
  16. Mejores comandos de MongoDB te necesitas saber
  17. Replicación de MongoDB: Una introducción completa
  18. Cómo configurar un clúster de MongoDB
  19. Fragmentos de MongoDB: Conceptos, Ejemplos y Tutoriales
  20. MongoDB Atlas: Configuración y uso de MongoDB gestionado
  21. Cómo ejecutar MongoDB como contenedor Docker
  22. Uso, gestión y requisitos de memoria de MongoDB
  23. Cómo utilizar Mongodump para copias de seguridad de MongoDB
  24. Ejemplos de Mongorestore para restaurar copias de seguridad de MongoDB
  25. Cómo utilizar PyMongo
  26. Cómo utilizar Mongoose para MongoDB y NodeJS
  27. Chuletas de MongoDB
  28. MongoDB vs Cassandra: Comparación de bases de datos NoSQL
  29. PostgreSQL vs MongoDB: Comparando bases de datos
  30. MySQL vs MongoDB: Comparando bases de datos
  31. Certificaciones MongoDB: Una introducción

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Orquestación

Suscríbete al Informe

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Gracias te

Tú te has suscrito a The Brief
El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.