Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

240
Views
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 ] } ]
over 4 years ago · Santiago Trujillo
1 answers
Answer question

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í

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!