2016-07-01 3 views
2

Я делаю сайт для изучения данных mongoDB. В моей базе данных хранятся измерения GPS, снятые с смартфонов. Я использую различные запросы для изучения этих измерений. У меня есть один запрос, который группируется по дням и подсчитывает измерения. Другой запрос подсчитывает количество измерений для каждого типа смартфона (iOS, Android,). Etc ..

Все эти запросы имеют одинаковые параметры соответствия $ в конвейере агрегации. В этом конвейере я фильтрую измерение для того, чтобы сфокусироваться с интервалом времени и в географической области.

Есть ли способ сохранить подмножество, полученное в сопоставлении $ в кеше, таким образом, чтобы база данных не требовала применения этого фильтра каждый раз?

Я хочу оптимизировать время отклика моих запросов.

Пример одного запрос:

cursor = db.myCollection.aggregate(
    [ 
    { 
     "$match": 
     { 
      "$and": [{"t": {"$gt": tMin, "$lt": tMax}, "location":{"$geoWithin":{"$geometry":square}}}] 
     } 
    }, 
    { 
     "$group": 
     { 
      "_id": {"hourGroup": "$tHour"}, 
      "count": {"$sum": 1} 
     } 
    } 
    ] 
) 

Я хочу, чтобы результат этого в кэше:

"$match": 
    { 
     "$and": [{"t": {"$gt": tMin, "$lt": tMax}, "location":{"$geoWithin":{"$geometry":square}}}] 
    } 
+0

Я не вижу, как это сделать. – SwissFr

ответ

1

так, как вы могли бы сделать это, чтобы создать новую коллекцию, используя $out этап трубопровода.

Затем, когда вы поедете с пакетом запроса, первый запрос создаст сопоставленный вывод, а следующие могут использовать его результаты.

Там будет новый этап трубопровода в развитии называется $facet, где мы сможем выполнить матч, а затем использовать этот результат множественного пути агрегации (план, чтобы он готов в Монго 3.4)

Все комментарии добро пожаловать!

+0

Мой набор данных очень большой. Создание новой коллекции может быть проблематичным с точки зрения хранения. $ facet может решить его в будущем, но мне нужна альтернатива на данный момент. – SwissFr

Смежные вопросы