我有兩個集合MongoDB中:匹配另一個文檔的分組是MongoDB的/ PyMongo回報文件
- 車輛
- 測試
測試包含分數評估,這包括財產「 _vehicle_id「
我需要返回所有在其最後5次測試中至少有3次測試中得分高於70(存儲爲int)的車輛(使用屬性」unit_score「) 。
我已閱讀關於子文檔,排序,限制等,但我很難單獨如何在Mongo中實現這一點。到目前爲止,我的努力一直是爲所有人檢索最後5個結果,然後用Python進行迭代,但是當我每30秒可能進行10,000次測試時,這種方法效率極低...
所以我尋找一種方式讓MongoDB/PyMongo只返回3個以上匹配的車輛文件,其中unit_score> 70.
我目前有以下代碼,它返回每個匹配車輛的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_id是一個bson ObjectId(),所以我希望它會像db.vehicles.find_one(「$ _ vehicle_id」)一樣簡單,但我害怕不會...
感謝您的幫助。
你看過使用['聚集'](http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate)嗎? – JohnnyHK
我還沒有,@JohnnyHK ...閱讀聚合,我認爲這將用於找到我的測試標準,由_vehicle_id組,SUM我的匹配,然後返回_vehicle_ids的列表。有一種方法可以在一個查詢中返回實際的唯一車輛嗎?謝謝:) –
或者使用MapReduce會更好嗎? –