Python MongoDB/PyMongo返回与其他文档分组匹配的文档
我在MongoDB有两个系列: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
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。这是我自己调查的结果,但我希望有一个更精简的方法。