Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python MongoDB/PyMongo返回与其他文档分组匹配的文档_Python_Mongodb_Pymongo - Fatal编程技术网

Python MongoDB/PyMongo返回与其他文档分组匹配的文档

Python MongoDB/PyMongo返回与其他文档分组匹配的文档,python,mongodb,pymongo,Python,Mongodb,Pymongo,我在MongoDB有两个系列: 车辆 测验 测试包含评估分数,其中包括属性“\u vehicle\u id” 我需要返回在最近5次测试中至少3次得分高于70(存储为整数)的所有车辆(使用属性“unit_score”) 我读过关于子文档、排序、限制等方面的内容,但我很难单独在Mongo中实现这一点。到目前为止,我一直在努力为所有人检索最后5个结果,然后用Python进行迭代,但当我每30秒处理10000个测试时,这是非常低效的 因此,我正在寻找一种方法,让MongoDB/PyMongo只返回与un

我在MongoDB有两个系列:

  • 车辆
  • 测验
  • 测试包含评估分数,其中包括属性“\u vehicle\u id”

    我需要返回在最近5次测试中至少3次得分高于70(存储为整数)的所有车辆(使用属性“unit_score”)

    我读过关于子文档、排序、限制等方面的内容,但我很难单独在Mongo中实现这一点。到目前为止,我一直在努力为所有人检索最后5个结果,然后用Python进行迭代,但当我每30秒处理10000个测试时,这是非常低效的

    因此,我正在寻找一种方法,让MongoDB/PyMongo只返回与unit_分数>70的情况下有3次以上匹配的车辆文档

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

    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\u id是一个bson ObjectId(),所以我希望它能像db.vehicles一样简单。查找一个($\u vehicle\u id),但恐怕不是


    感谢您的帮助。

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


    因此,在本例中,您必须执行
    test.aggregate
    调用,该调用使用
    db.vehicles.find({u id:{$in:vehicle\u id}})获取车辆id
    查询以获取这些ID的车辆文档,其中
    车辆\u ID
    是您根据
    聚合结果构建的ID数组。

    您看过使用吗?我没有,@johnyhk。。。阅读聚合,我假设这将用于查找我的测试标准、按车辆id分组、对匹配项求和,然后返回车辆id列表。是否有办法在一次查询中返回实际的唯一车辆?谢谢:)或者使用MapReduce会更好吗?您需要在聚合管道的每个阶段都显式地在最终输出中包含任何字段
    aggregate
    通常比map reduce快得多,所以如果可能的话,您一定要避免使用map reduce。非常感谢@JohnnyHK。我掌握了这个概念,现在正在Python Shell中使用它。我刚刚发现了“$gte”和“$lte”,我认为这是拼图的最后一块……这似乎不符合我的要求,好像我理解正确一样,$first只显示组中第一项的属性,这将是一个测试实例,而不是车辆,因此没有“颜色”和“型号”作为测试文档的一部分,我们将无法访问车辆的属性,因为我们无法在聚合中的对象之间进行遍历。我希望我错了?@KarlM.W。对不起,我的错,我误解了你的问题。请参阅更新的答案。太好了,谢谢@johnyhk。这是我自己调查的结果,但我希望有一个更精简的方法。