Estoy usando el cliente asíncrono de Motor para mongoDB en el proyecto actual, y me gustaría usar la agregación como agrupar por para la consulta. Los documentos contienen información breve sobre el grupo, pero no hay ejemplos de cómo hacerlo.
Parámetros:
No sé qué significa exactamente parámetro inicial y reducción (¿como una cadena de javascript?). ¿Puedes dar un ejemplo?
El método de group de Motor toma los mismos parámetros que el de PyMongo. Adaptando el ejemplo del grupo PyMongo a Motor:
from bson.code import Code from tornado import ioloop, gen from motor import MotorClient reducer = Code(""" function(obj, prev){ prev.count++; } """) db = MotorClient().test @gen.coroutine def example(): yield db.things.remove({}) yield db.things.insert_many([ {'x': 1}, {'x': 2}, {'x': 2}, {'x': 3}, ]) results = yield db.things.group(key={"x": 1}, condition={}, initial={"count": 0}, reduce=reducer) for doc in results: print(doc) ioloop.IOLoop.current().run_sync(example)Esto imprime:
{'count': 1.0, 'x': 1.0} {'count': 2.0, 'x': 2.0} {'count': 1.0, 'x': 3.0}