У меня есть коллекция MongoDB, которая содержит набор документов. Каждый документ имеет ISODate date
и целое число id
(не _id
). id: X
указано, что существует для date: D
, если в коллекции есть документ с указанием значений полей { id: X, date: D }
. Так, например:Как вычислить разницу двух запросов?
{ id: 1, date: 1/1/2000 }
{ id: 1, date: 1/2/2000 }
{ id: 1, date: 1/3/2000 }
{ id: 1, date: 1/4/2000 }
{ id: 2, date: 1/2/2000 }
{ id: 2, date: 1/3/2000 }
{ id: 3, date: 1/3/2000 }
Я хотел бы отслеживать id
сек с течением времени, как они создаются и уничтожаются изо дня в день. Используя приведенные выше данные, в диапазоне дат 1/1/2000 до 1/4/2000:
1/1/2000: id 1 is created
1/2/2000: id 2 is created
1/3/2000: id 3 is created
1/4/2000: id 2 is destroyed
1/4/2000: id 3 is destroyed
Я думаю, что лучший способ решить это будет день цикла на день, посмотрим, что существуют id
s между сегодня и на следующий день, и выполняйте заданную разницу. Например, чтобы получить набор идентификаторов, созданных и уничтоженных на 1/2/2000, мне нужно выполнить два установочных различие между массивами в любой день:
var A = [ <ids that exist on 1/1/2000> ];
var B = [ <ids that exist on 1/2/2000> ];
var created_set = set_difference(B, A); // Those in B and not in A
var destroyed_set = set_difference(A, B); // Those in A and not in B
я могу использовать команду find()
получить курсоры для A
и B
, но я не знаю, как выполнить set_difference
между двумя курсорами.
Моим другим вариантом было использование конвейера агрегации, но я не могу думать о том, как сформулировать трубопровод таким образом, чтобы я мог использовать оператор $setDifference
.
Будучи новичком MongoDB, я уверен, что я думаю о проблеме неправильно. Неужели это можно сделать? Что мне не хватает?
Что именно ваша цель? найти все изменения, произошедшие между двумя датами? генерировать список всех измененных когда-либо? – jtmarmon
@jtmarmon Моя цель - создать список создания и уничтожить даты для каждого идентификатора, найденного в коллекции. Второй список приведенных выше данных показывает, когда различные иды создаются и уничтожаются, это то, что я буду делать. – fbrereto
Является ли дата форматом ISODate? – chridam