如何在Motor 1.1中分组?

时间:2017-01-12 14:26:35

标签: python mongodb tornado-motor

我在当前项目中使用了用于mongoDB的Motor异步客户端,并且我想使用像group by这样的聚合进行查询。文档包含有关组的简短信息,但没有示例如何。

参数:

  1. key:分组的字段(参见上述说明)
  2. condition:要考虑的行的规范(作为find()查询 规范)
  3. initial:聚合计数器对象的初始值
  4. reduce:聚合函数作为JavaScript字符串
  5. 我不知道究竟什么意思是初始参数和减少(作为javascript字符串?)。 你能举一个例子吗?

1 个答案:

答案 0 :(得分:1)

Motor的group方法采用与PyMongo相同的参数。使PyMongo group example适应电机:

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)

打印:

{'count': 1.0, 'x': 1.0}
{'count': 2.0, 'x': 2.0}
{'count': 1.0, 'x': 3.0}