Tengo algunos documentos como este y necesitamos ciertos cambios en su salida.
"gameId": "string", "markets": { "market X": { "instagram": "string", "lastVersion": 0, "market": "market X", "name": "string", "supportedVersion": 0, "telegram": "string", "config":{"A":1,"B":2 , "C":"c" } }, "market Z":{ "instagram": "string", "lastVersion": 0, "market": "market Z", "name": "string", "supportedVersion": 0, "telegram": "string", "config":{"D":5,"E":8 , "F":"vb" } } }y quiero escribir un agregado monogo hacer la salida de la siguiente manera
[ { "gameId": "string", "instagram": "string", "lastVersion": 0, "market": "string", "name": "string", "supportedVersion": 0, "telegram": "string" }, { "gameId": "string", "instagram": "string", "lastVersion": 0, "market": "string", "name": "string", "supportedVersion": 0, "telegram": "string" } ]Traté de obtener la respuesta correcta pero no funcionó. ¿Qué crees que debo hacer?
Esta canalización de agregación produce el resultado deseado a partir de su documento de ejemplo.
db.collection.aggregate([ { "$addFields": { "x": { "$map": { "input": { "$objectToArray": "$markets" }, "in": "$$this.v" } } } }, { "$unset": "x.config" }, { "$addFields": { "x.gameId": "$gameId" } }, { "$unwind": "$x" }, { "$replaceWith": "$x" } ])Pruébalo en mongoplayground.net .
Intento obtener la respuesta correcta con esta consulta.
game_collection.aggregate([ { "$match": { "_id": ObjectId(data["gameId"]) } }, { "$project": { "x": {"$objectToArray": "$markets"}, } }, { "$replaceRoot": { "newRoot": { "gameId": data["gameId"], # "name": "$xk", "address": "$xv" } } }, { "$addFields": { "gameId": f"$$this.v.gameId", } } ])