当数据非常嵌套时如何使用 $gt 聚合文档和聚合 Pymongo

Posted

技术标签:

【中文标题】当数据非常嵌套时如何使用 $gt 聚合文档和聚合 Pymongo【英文标题】:How to aggregate documents using $gt and aggregate Pymongo when the data is very nested 【发布时间】:2021-04-11 02:03:48 【问题描述】:

我的数据在集合collec 中,然后数据非常嵌套。我想在我的db 中获取所有数据,它有一个confidence> 0.33

我写了这样一个查询:

returned_data = 
for q in collec.find("question": "$in":all_question_ids)):
    if q['response']['detection']['confidence'] >= 0.3:
        returned_data[q['id1']] = q['response']['detection']['confidence']

这花费了太多时间,我认为它正在单独查找每个条目。

如何使用aggregate$gt 来获得结果?

【问题讨论】:

【参考方案1】:

您可以使用聚合查询通过管道(即一系列操作)提取相关数据。首先,您将根据大于 0.3 的置信度匹配文档,然后您可以投影匹配的文档,以便只返回必填字段。

pipeline = [
    '$match': 'response.detection.confidence': '$gt': 0.3,
    '$project': 'question_id': '$id1',
                  'confidence': '$response.detection.confidence'
    ]

cursor = collec.aggregate(pipeline, useCursor=True, batchSize=50000) 
result = list(cursor)

【讨论】:

这里的$id1 是什么?此外,您有缩进错误,这不是什么大问题,但即使我使用 .limit(10),我的计算机在过去 2 小时内一直在处理此查询 all_question_ids 是我要查找的所有问题 ID 的列表。 [ObjectId('28_char_alphanum_id')],......] 根据您的查询,我认为 $id1 是 question_id 的键 - 这是错误的吗? 回复。 all_question_ids 您可以使用$and 匹配多个条件。例如 - 将我的代码中的 $match 语句替换为 '$match': '$and': ['response.detection.confidence': '$gt': 0.3, "question": "$in":all_question_ids]

以上是关于当数据非常嵌套时如何使用 $gt 聚合文档和聚合 Pymongo的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB 聚合 - 我如何“$lookup”嵌套文档“_id”?

如何在elasticsearch的嵌套聚合中存储空字段和非空字段?

聚合以创建具有嵌套文档值的文档

查询 $match 和 $project 重嵌套数据(MongoDB/聚合)

(Elasticsearch)如何获取所有文档的嵌套字段的最后一个元素,然后执行子聚合

Elasticsearch系列---聚合查询原理