Tengo un documento que se ve así:
{ _id: ObjectId("6222ca4252925ad4c3faec08"), value: ["test1","test2"] }Me gustaría conseguir:
{ _id: ObjectId("6222ca4252925ad4c3faec08"), “value”: { “value1”: "test1", “value2”: "test2" } }He intentado usar reduce pero obtengo cada valor en un objeto pero estoy muy cerca. Por favor, hágame saber lo que estoy haciendo mal:
Código:
{ "$project": { "value": { $reduce: { input: "$value", initialValue: [], in: {$concatArrays: [ "$$value", [{"name": "$$this"}] ]} } } } }Resultados:
{ "_id" : ObjectId("6222ca4252925ad4c3faec08"), "value" : [ { "name" : "test1" }, { "name" : "test2" } ] }Actualmente solo está creando una matriz usando $reduce . En su lugar, puede intentar usar $map para crear una matriz de formato [key, value] y luego usar $arrayToObject para convertir eso en un mapa como se muestra a continuación:
[ { "$project": { "provider": { "$arrayToObject": { "$map": { "input": "$value", "as": "v", "in": [ { "$concat": [ "value", { "$toString": { "$indexOfArray": [ "$value", "$$v" ] } } ] }, "$$v" ] } } } } } ] El $indexOfArray es solo para obtener la clave del value(N) .