首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongodb集合中文档的COUNTIF函数

mongodb集合中文档的COUNTIF函数
EN

Stack Overflow用户
提问于 2019-05-17 12:26:42
回答 1查看 117关注 0票数 0

我的问题涉及到mongodb和pymongo;我有一个包含多个集合的数据库。每个集合中有数千个文档,但大多数只包含大约10-200个“唯一”文档。我想要计算每个“唯一”文档在特定集合中出现的次数。我见过带有特定字段值的COUNTIFS示例,但没有计算整个文档。

我已经阅读了相当多关于聚合的内容,但我仍然不知道我是否在正确的轨道上;我希望得到一些指导。

假设集合中总共有20个文档,但只有3个是唯一的。我想输出类似下面这样的COUNTIF值。

代码语言:javascript
复制
{ "_id" : ObjectId("5cde2f68416437c1ae98de18"), "Source Network Address LP" : [ "192.168.5.5" ], "Account Name" : [ " -", " ANONYMOUS LOGON" ], "Process Name LP" : [ "-" ] } - 10
{ "_id" : ObjectId("5cde2f68416437c1ae98de19"), "Source Network Address LP" : [ "192.168.5.8" ], "Account Name" : [ " -", " ANONYMOUS LOGON" ], "Process Name LP" : [ "-" ] } - 6
{ "_id" : ObjectId("5cde2f68416437c1ae98de19"), "Source Network Address LP" : [ "192.168.5.2" ], "Account Name" : [ " -", " ANONYMOUS LOGON" ], "Process Name LP" : [ "-" ] } - 4

最后,我将以以下格式将此输出写入CSV文件:

代码语言:javascript
复制
Source Network Address,Account Name,Process Name LP,count
'192.168.5.5','-|ANONYMOUS LOGON','-',10
'192.168.5.8','-|ANONYMOUS LOGON','-',6
'192.168.5.2','-|ANONYMOUS LOGON','-',4
EN

回答 1

Stack Overflow用户

发布于 2019-05-18 12:19:53

我确实想出了一个问题的解决方案,但没有使用pymongo进行过滤/计数。相反,我只是简单地迭代了db.collection.find()输出,并使用了带有python-box (https://pypi.org/project/python-box/)的collections.Counter()。在普通的内置Python字典中使用collections.Counter()是不可能的,因为字典是不可散列的。但是,您可以使用冻结的python-box Box()对象创建一个哈希字典,然后使用collections.Counter()进行计数。

在开始计算时,我确实遇到了一个小问题,因为即使文档几乎完全相同,由于_id字段的唯一性,它们也永远不会完全相同。

代码语言:javascript
复制
for doc in db.collections.find():
    dict_record = dict(doc)
    del(dict_doc['_id'])
    # Box object makes dict object hashable so we can count
    b = Box(dict_doc, frozen_box=True)
    stacked[b] += 1

如果有人想出一个纯粹使用pymongo进行过滤和计数的解决方案,请让我知道;我很好奇。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56179598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档