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

160
Visualizações
Convierta el elemento del mapa $objectToArray en String

Tengo una colección en la base de datos de la que estoy tratando de recuperar algunos datos, la consulta funciona bien cuando $orderID tiene elementos de cadena, pero falla cuando $orderID tiene algunos números en la matriz, y está arrojando

 query failed: (Location40395) PlanExecutor error during aggregation :: caused by :: $arrayToObject requires an array of key-value pairs, where the key must be of type string. Found key type: double

Creo que debe haber algunos datos antiguos cuando orderID como un número, por eso está fallando en algún rango de fechas

Consulta

 { "Order_Details": { "$map": { "input": { "$objectToArray": { "$arrayToObject": { "$zip": { "inputs": [ "$orderID", "$total_value_of_order" ] } } } }, "as": "el", "in": { "orderID": "$$el.k", "total_value_of_order": "$$el.v" } } } }

Estoy tratando de encasillar el.k en una cadena. Estoy usando $toString pero parece que no funciona, la forma en que lo intento es

 { "as": "el", "in": { "orderID": { "$toString": "$$el.k" }, "total_value_of_order": "$$el.v" } }

colección de ejemplo

 [ { "_id": ObjectId("5e529ee5f8647eb59e5620a2"), "visitID": "dVmy7flXFHzzkn9HiMt8IoWvthoTZW", "date": ISODate("2022-02-08T16:29:13.413Z"), "control": true, "orderID": [ 122343242 ], "target": "test", "total_value_of_order": [ 60 ] } ]
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Estás cerca, el enfoque está bien. solo tienes un par de problemas de sintaxis. Lo más importante que debe cambiar es la entrada para $arrayToObject , actualmente su entrada se ve así:

 [[number, number], [number, number]]

Sin embargo $arrayToObject espera una entrada en cierto formato:

 [{k: string, v: value}]

Entonces esto es lo que agregaremos, así:

 db.collection.aggregate([ { $project: { "Order_Details": { "$map": { "input": { "$objectToArray": { "$arrayToObject": { $map: { input: { "$zip": { "inputs": [ "$orderID", "$total_value_of_order" ] } }, in: { k: { $toString: { "$arrayElemAt": [ "$$this", 0 ] } }, v: { "$arrayElemAt": [ "$$this", 1 ] } } } } } }, "as": "el", "in": { "orderID": "$$el.v", "total_value_of_order": "$$el.k" } } } } } ])

Parque infantil Mongo

Observe que el formato "orderid" cambia a string , lo que afecta su estructura, recomiendo simplemente cambiar entre k y v en la canalización, así

about 4 years ago · Juan Pablo Isaza 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