У меня есть две коллекции в MongoDB:MongoDB/PyMongo возвращает документы, которые соответствуют другой документ группировки
- Транспорт
- Тесты
Тесты содержит оценки для оценки, которая включает в себя свойство " _vehicle_id "
Мне нужно вернуть все транспортные средства, которые набрали более 70 (хранится как int), по крайней мере, в 3 из последних 5 тестов (используя свойство« unit_score ») ,
Я читал о поддокументах, сортировке, ограничении и т. Д., Но я в тупике, как добиться этого только в Монго. До сих пор мои усилия состояли в том, чтобы извлечь последние 5 результатов для всех людей, а затем перебрать их на Python, но это значительно неэффективно, когда я работаю с потенциально 10 000 тестов каждые 30 секунд ...
Так что я ищет способ для MongoDB/PyMongo ТОЛЬКО вернуть документы транспортного средства, которые имели более 3-х совпадений, где unit_score> 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 } } }
])
Дата будет динамичной (для e last x minutes), но теперь он статичен для тестирования.
Я посмотрел на «$ project», но я не уверен, правильно ли это для возвращения связанного объекта. _vehicle_id - это bson ObjectId(), поэтому я надеялся, что это будет так же просто, как db.vehicles.find_one («$ _ vehicle_id»), но я не боюсь ...
Спасибо за вашу помощь.
Вы использовали ['aggregate'] (http://api.mongodb.org/python/current/api/pymongo/collection.html#pymongo.collection.Collection.aggregate)? – JohnnyHK
Я не, @JohnnyHK ... Считаю, что это будет использоваться для поиска критериев тестирования, группы _vehicle_id, SUM моих совпадений, а затем возвращает список _vehicle_ids. Есть ли способ для этого вернуть реальные уникальные Транспортные средства в одном запросе? Спасибо :) –
Или было бы лучше использовать MapReduce? –