MongoDB/PyMongo返回与另一个文档分组匹配的文档

2024-05-16 21:58:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我在MongoDB中有两个集合:

  1. 车辆
  2. 测试

测试包含评估分数,其中包括属性“_vehicle_id”

我需要返回在过去5次测试中至少有3次得分超过70分(存储为int)的所有车辆(使用属性“unit_score”)。在

我独自一人读了很多文件。到目前为止,我的工作是检索所有人的最后5个结果,然后在Python中迭代,但是当我每30秒处理10000个测试时,这是非常低效的。。。在

因此,我正在寻找一种方法,让MongoDB/PyMongo只返回有3个以上匹配的车辆文档,其中unit_得分>70。在

我当前有以下代码,它返回每个匹配车辆的ObjectId(),但我希望它为每个匹配项返回vehicle对象:

db.tests.aggregate([
{ "$match" : { 'statuscode' : '404', 'datetime' : { "$gte" : "2013-11-22 15:05:35" } } },
{ "$group" : { "_id" : "$_vehicle_id", "count" : { "$sum" : 1 }}},
{ "$match" : { "count" : { "$gt" : 3 } } }
])

日期将是动态的(在最后x分钟内),但出于测试目的,它现在是静态的。在

我看过“$project”,但我不确定这是否适合返回关联的对象。_vehicle_id是一个bson ObjectId(),所以我希望它能像车辆数据库。找到一个(“$\u vehicle_id”),但我担心没有。。。在

谢谢你的帮助。在


Tags: 文件对象id属性mongodbmatchcountunit
1条回答
网友
1楼 · 发布于 2024-05-16 21:58:38

MongoDB不支持联接,因此单个MongoDB查询(无论是find还是{})只能访问单个集合中的文档。在

因此,在本例中,您必须跟踪您的test.aggregate调用,该调用通过一个db.vehicles.find({_id: {$in: vehicle_ids}})查询来获取这些ID的车辆文档,其中vehicle_ids是根据aggregate结果构建的ID数组。在

相关问题 更多 >