0

У меня есть пара элементов, одно из которых - это временная метка unix, основанная на UTC, умноженная на 1000, чтобы включить миллисекунды, сохраняя при этом значение long (целое число).Значение смещения перед группировкой

{ 
    "title" : "Merkel 'explains' refugee convention to Trump in phone call", 
    "iso" : "2017-01-31T04:03:53.807+0000", 
    "id" : NumberLong(1485835433807) 
} 
{ 
    "title" : "NASA to Explore an Asteroid Containing Enough Mineral Wealth to Collapse the World Economy", 
    "iso" : "2017-01-30T23:20:27.327+0000", 
    "id" : NumberLong(1485818427327) 
} 
{ 
    "title" : "IMGKit: Python library of HTML to IMG wrapper", 
    "iso" : "2017-01-30T23:15:39.488+0000", 
    "id" : NumberLong(1485818139488) 
} 

iso поле только текстовая строка для облегчения отладки, она не имеет никакой другой цели.

Я намерен использовать метод, описанный в https://stackoverflow.com/a/26550803/277267, для повторной выборки элементов, чтобы создать сводку элементов в день, изначально просто количество, если количество элементов в день.

Проблема в том, что временная метка (поле "id") не может быть использована для архивирования этого из-за смещения UTC. В зависимости от местоположения пользователя (или локального времени вставки, то есть 00:30 по местному времени по 23:30 по воскресеньям UTC, если часовой пояс + 1 час), элемент будет принадлежать либо одному или другому, так что поле не хватает этой информации.

Предполагая, что я просто хочу, чтобы добавить смещение к "id" полю, то есть на 3600000, который один час выражается в миллисекундах, прежде чем начать повторную выборку данных на основе "id" поля, как я могу АРХИВ это в трубопроводе агрегации ?

Есть ли способ получить первый этап, который принимает значение поля "id", добавьте 3600000 к этому значению и сохраните его в поле "id_offsetted", на котором я могу выполнить следующие этапы?

+0

Я не после вашего рассуждения за хранение даты как numberlong, так как объект дата достаточно точен, чтобы включить миллисекунды. –

+0

Это решение проблем производительности на клиентах (Java и JavaScript). Я имею дело с 10 из 1000 пунктов за выборку, секунды времени ожидания для пользователя имеют значение. Кроме того, поле '' id ''является уникальным хешируемым, сортируемым и индексируемым ключом (для каждого пользователя) –

+0

Скорее всего, ваша причина для загрузки 10 000 + документов в память не является хорошей. Работа, которую ваша Java/JavaScript пытается сделать с этими записями, должна выполняться в запросах. –

ответ

1

Версия Перед 3,4

{$project: { 
     "title" : 1, 
     "iso" : 1 
     "id" : 1, 
     "id_offsetted" : {$add: ["$id", 3600000]} 
    } } 

версии 3,4 года

{$addFields: { 
     "id_offsetted" : {$add: ["$id", 3600000]} 
    } }