Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

127
Visualizações
Cómo convertir dos matrices en un objeto en mongoDB donde la primera matriz tiene múltiples valores iguales

Después de un procesamiento con una agregación de mongo, tengo una colección como:

 [{ field1: 10, field2: 50, field3: { name: ["a","b","a","a"], value: [1,2,3,4] } },...]

Estoy luchando por encontrar una manera de convertirlo en:

 [{ field1: 10, field2: 50, a:[1,3,4], b:[2] },...]

Usando la agregación mongo en mongoshell o compass

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Entonces la idea es:

  1. Elija una de las matrices del field3 3, diga el name para generar el rango de matriz [0, 1, 2, 3] .
  2. Recorra la matriz de name y value simultáneamente para obtener una matriz de { k: "", v: "" } .
  3. $unwind la matriz de la etapa anterior para agruparla.
  4. Agrupe por clave field3.k para acumular todos los valores field3.v .
  5. Nuevamente agrupe por null para generar una matriz de patrón { k: "", v: "" } .
  6. Concatene field1 y field2 en la matriz de la etapa anterior.
  7. Finalmente, convierta la matriz en objeto usando $arrayToObject .

Prueba esto:

 db.testCollection.aggregate([ { $addFields: { field3: { $map: { input: { $range: [0, { $size: "$field3.name" }] }, as: "index", in: { k: { $arrayElemAt: ["$field3.name", "$$index"] }, v: { $arrayElemAt: ["$field3.value", "$$index"] } } } } } }, { $unwind: "$field3" }, { $group: { _id: "$field3.k", field1: { $first: "$field1" }, field2: { $first: "$field2" }, k: { $first: "$field3.k" }, v: { $push: "$field3.v" } } }, { $group: { _id: null, field1: { $first: "$field1" }, field2: { $first: "$field2" }, array: { $push: { k: "$k", v: "$v" } } } }, { $addFields: { array: { $concatArrays: [ [{ k: "field1", v: "$field1" }, { k: "field2", v: "$field2" }], "$array" ] } } }, { $replaceRoot: { newRoot: { $arrayToObject: "$array" } } } ]);

Producción

 { "field1" : 10, "field2" : 50, "a" : [ 1, 3, 4 ], "b" : [ 2 ] }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda