如何在 Motor 1.1 中分组?
How to group by in Motor 1.1?
我在当前项目中为 mongoDB 使用 Motor 异步客户端,我想使用 group by 之类的聚合来进行查询。文档包含有关组的简短信息,但没有示例。
参数:
- key:要分组的字段(见上面的描述)
- 条件:要考虑的行规范(作为 find() 查询
规格)
- initial:聚合计数器对象的初始值
- reduce:聚合函数作为 JavaScript 字符串
我不知道初始参数和 reduce 的确切含义(作为 javascript 字符串?)。
你能举个例子吗?
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}
我在当前项目中为 mongoDB 使用 Motor 异步客户端,我想使用 group by 之类的聚合来进行查询。文档包含有关组的简短信息,但没有示例。
参数:
- key:要分组的字段(见上面的描述)
- 条件:要考虑的行规范(作为 find() 查询 规格)
- initial:聚合计数器对象的初始值
- reduce:聚合函数作为 JavaScript 字符串
我不知道初始参数和 reduce 的确切含义(作为 javascript 字符串?)。 你能举个例子吗?
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}