Necesito obtener dos campos de un registro en una colección, digamos "cpyKey" y "dispositivos". hay varios registros que tienen la misma "cpyKey" y "dispositivos". Necesito extraer el registro con el último campo "run_date" disponible en el registro y ordenar el resultado en orden ascendente de "dispositivos".
Usando pymongo. ¿Alguien puede ayudarme a enmarcar la consulta?
agg_result=list(db.xyz.aggregate( [#{ #"$match":{}}, {"$group": {"_id":"$cpyKey","Max Devices":{"$max":"$devices"}}}, #{"$sum":1} -->Gives no. of records related to "_id":"$cpyKey" field {"$sort":{"Max Devices":1}} ]))
anteriormente hice esto, pero ahora, debe haber un cambio... en lugar de obtener el máximo de dispositivo, necesito tener el dispositivo del último registro insertado de cpyKey en particular.
Lo intenté :
mk=list(db.xyz.find({},{"_id":0,"run_date":1}).sort([('run_date',-1)]).limit(1)) print(mk) #mk is extracting the latest run_date value, but it is associated with a cpyKey agg_result=list(db.xyz.find({"run_date":mk[0]['run_date']},{"cpyKey":1,"devices":1,"_id":0})) print(agg_result) #while implimenting mk in above, it gives a record to which it is associated
Pero no me da valores para todas las cpyKey
Primero puede ordenar por run_date
Y luego use $last
en la fase de grupos, para recuperar los Max Devices
correspondientes del último elemento para cada cpyKey
[ { "$sort": { "run_date": 1 } }, { "$group": { "_id": "$cpyKey", "Max Devices": { "$last": "$Max Devices" } } }, { "$sort": { "Max Devices": 1 } } ]
pruébalo aquí