gpt4 book ai didi

MongoDB 对象数组,按一些简单条件计数并按对象键分组

转载 作者:可可西里 更新时间:2023-11-01 10:10:47 24 4
gpt4 key购买 nike

我有一堆来自 VirusTotal 的报告,我心想:“为了创建我需要的统计数据,为什么不将数据放入 MongoDB 中并简单地查询它。现在不能太难了,可以吗?”

嗯,它可以。这是基本的数据格式。

data format

我最感兴趣的是 scans 数组。不幸的是,扫描器名称是对象的键,而且由于我绝不是 MongoDB 新手,所以我不知道如何处理这个问题。该死,我什至不知道如何在 Google 上搜索。

我想做什么:

  • 计算有多少扫描仪detected:true(和false),按扫描仪名称分组。例如这样的事情(对于 true 搜索):

    Bkav: 20000
    TotalDefense: 19238
    BitDefender: 39132
    ...
  • 另一个有趣的部分涉及 result 字段。它包含恶意软件的名称,我想创建一个统计数据,有多少扫描器对特定文件和整个集合使用相同的恶意软件系列名称。

我非常感谢一些示例或指示。我即将编写一个小的 python 脚本来扫描所有 JSON 文件并执行我需要的操作而不是使用 MongoDB。

最佳答案

要从对象到数组,您可以使用$objectToArray (Mongo 3.6 及更新版本):

db.getCollection('collection').aggregate([
{$project: {scans: {$objectToArray: '$scans'}}}, // object -> array
{$unwind: '$scans'}, // array -> multiple docs
{$match: {'scans.v.detected': true /*or false*/}}, // filter
{$group: {_id: '$scans.k', count: {$sum: 1}}} // group
])

结果会是这样的:

[{
"_id" : "TotalDefense",
"count" : 1.0
},
{
"_id" : "Bkav",
"count" : 3.0
}]

至于第二个问题:$group也适用于对象,因此您可以按 {scanner: '$scans.k', result: '$scans.v.result'} 进行分组。

关于MongoDB 对象数组,按一些简单条件计数并按对象键分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51695210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com