es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Desdoblamos 3 arreglos en MongoDB.

Colección de datos de MongoDB con múltiples arrays:

{
"_id": ObjectId("61aa6bf1742b00f59b894eb7"),
"first": ["abc", "def", "ghi"],
"last": ["rst", "uvw", "xyz"],
"numb": ["12", "34", "56"]
}

Resultado esperado donde los datos en los arrays deben estar en este formato:

{
"first": "abc",
"last": "rst",
"numb": "12"
},
{
"first": "def",
"last": "uvw",
"numb": "34"
},
{
"first": "ghi",
"last": "xyz",
"numb": "56"
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir los datos en los arrays al formato esperado, podemos usar el operador $unwind en combinación con $project. El operador $unwind creará un documento separado para cada elemento en los arrays, y luego podemos usar $project para dar forma a los documentos al formato deseado.

    El siguiente pipeline de agregación en MongoDB se puede usar para obtener la salida esperada:

    db.collection.aggregate([
       { $unwind: { path: "$first" } },
       { $unwind: { path: "$last" } },
       { $unwind: { path: "$numb" } },
       { $project: {
           _id: 0,
           first: 1,
           last: 1,
           numb: 1
       } }
    ])
    

    Primero, usamos $unwind tres veces en los arrays first, last y numb para crear un documento separado para cada elemento en los arrays. Luego, usamos $project para eliminar el campo _id y dar forma a los documentos al formato deseado.

    La salida de este pipeline será:

    { "first" : "abc", "last" : "rst", "numb" : "12" }
    { "first" : "abc", "last" : "uvw", "numb" : "12" }
    { "first" : "abc", "last" : "xyz", "numb" : "12" }
    { "first" : "def", "last" : "rst", "numb" : "34" }
    { "first" : "def", "last" : "uvw", "numb" : "34" }
    { "first" : "def", "last" : "xyz", "numb" : "34" }
    { "first" : "ghi", "last" : "rst", "numb" : "56" }
    { "first" : "ghi", "last" : "uvw", "numb" : "56" }
    { "first" : "ghi", "last" : "xyz", "numb" : "56" }
    

    Cada documento representa una combinación de valores de los arrays first, last y numb sin duplicados.

Comments are closed.