Есть ли способ на групповом агрегате получить минимальную базу значений на основе значения второго поля? - PullRequest
0 голосов
/ 23 января 2019

Я на самом деле хочу проанализировать данные из базы данных Монго с данными за 1/4 часа, и несколько устройств могут отправлять обратно данные для одного и того же оборудования.

Таким образом, я на самом деле собираю совокупностьс базой совпадений на серийный номер и записи и ISOdate,

плюс группа, использующая переключатель для хранения каждого 1/4 часа в нужном месте, но я хотел бы также получить минимальное значение для каждого устройства, поэтому яможет иметь n разностных значений для одного и того же 1 / 4.

$ match:

'sn': {'$ in': ['sn1', 'sn2']},

'entry': {'$ in': [0,1,2,3,4]},

'dt': {'$ gte': ISODate ("2019-01-23T00: 00: 00.000 + 0000 "), '$ lt': ISODate (" 2019-01-24T00: 00: 00.000 + 0000 ")}

$ группа:

_id: {'entry': '$ entry', 'dt': {'$ switch': {'branch': [{'case': {'$ lte': ['$ dt', ISODate ("2019-01-23T00: 15: 00.000 + 0000 ")]}, 'then': ISODate (" 2019-01-23T00: 15: 00.000 + 0000 ")},

{'case': {'$ lte':['$ dt', ISODate ("2019-01-23T00: 30: 00.000 + 0000")]}, 'then': ISODate ("2019-01-23T00: 30: 00.000 + 0000 ")},

{'case': {'$ lte': ['$ dt', ISODate (" 2019-01-23T00: 45: 00.000 + 0000 ")]}, 'then': ISODate ("2019-01-23T00: 45: 00.000 + 0000")},

{'case': {'$ lte': ['$ dt', ISODate ("2019-01-23T00: 00: 00.000 + 0000 ")]}, 'then': ISODate (" 2019-01-23T01: 00: 00.000 + 0000 ")},

{'case': {'$ lte': ['$ dt', ISODate ("2019-01-23T01: 15: 00.000 + 0000")]}, 'then': ISODate ("2019-01-23T01: 15: 00.000 + 0000")},

{'case': {'$ lte': ['$ dt', ISODate ("2019-01-23T01: 30: 00.000 + 0000")]}, 'then': ISODate ("2019-01-23T01: 30: 00.000 + 0000")},

{'case': {'$ gte': ['$ dt', ISODate ("2019-01-23T01: 30:00.000 + 0000 ")]}, 'then': ISODate (" 2019-01-23T02: 00: 00.000 + 0000 ")},]}

}

}, значение: {'$ min': '$ value'}

Мой ожидаемый результат, то, что я хочу добавить, будет примерно таким:

_id: entry ": NumberInt (3)," dt ": ISODate ("2019-01-23T02: 00: 00.000 + 0000 ")

значения n1: 1, значение SN2: 0, AvgSNS: 0,5,

Я действительно не знаю, возможно ли этои я пытаюсь сделать меньше постобработки, насколько это возможно, это способ сделать это?

Заранее спасибо.

...