MongoDB中的聚合->示例->文档模式



我对MongoDB的所有东西都不太熟悉,但我遇到了一个问题,我很难找到答案(文档并不总是很清楚(。

本质上,我收集了大量具有这种结构的文档:

{'addr': 'x@a.com', 'rep': 2, ... } // there are 100s of fields
{'addr': 'x@b.com', 'rep': 2, ... } 
{'addr': 'x@c.com', 'rep': 2, ... } 
{'addr': 'x@a.com', 'rep': 2, ... } 
{'addr': 'x@b.com', 'rep': 2, ... } 
{'addr': 'x@c.com', 'rep': 2, ... } 

然后,我想做的是根据addr进行分组,例如每组最多1000个,然后输出pymongo中的所有文档。

我现在拥有的是类似的东西

aggs = mongo['db'].db.data['collection1'].aggregate([{'$group': {'_id': '$addr'}}, {'$sample': {'size': 10}}])

我看到我可以使用project来输出所有字段(我想(,但有没有一种方法可以访问每个聚合的结果,这样我就可以做一些类似的事情:

for agg in aggs:
for result in agg.results:
print(result)

你真的不能那样做。一旦$group,就需要指定要聚合任何要投影的字段的方式,这样就失去了所追求的分辨率。我倾向于保持简单,分两步完成。一个是获得不同addr的列表,然后对每组进行采样;类似于:

addrs =  db.collection1.distinct('addr')
for addr in addrs:
aggs = db.collection1.aggregate([{'$match': {'addr': addr}},
{'$sample': {'size': 10}}])
for agg in aggs:
print(f'{addr}, {agg}')

最新更新