Существует множество статей и SO-вопросов о модели данных MongoDB для хранения старых версий документов.MongoDB-дизайн для пересмотренных файлов
Однако я не нашел ничего, удовлетворяющего одному из моих требований; Мне нужно иметь возможность ретроактивно запрашивать базу данных, чтобы однозначно найти все документы, которые соответствовали произвольным критериям для данного момента времени.
Чтобы уточнить, мне нужно иметь возможность эффективно ответить на вопрос;
«Какие документы (и предпочтительно версии) соответствуют критериям {X: Y ...} в момент времени T".
псевдокод:
/* Would match a version that were active from 2010 - 2016-05-01 with zipcode 12345 */
db.my_objs.find({zipcode: "12345", ~time: ISODate("2016-01-01 22:14:31.003")~})
мне не удалось найти какое-либо решение, ни на гугле, ни себе. Я пытался;
- Имея простой «от» -timestamp данных, а затем выберите «первый пункт перед моей запрошено, что временной точкой также соответствует другим критериям», но мне не удалось выразить, что в Монго.
- Имея от/до каждой версии и всякий раз, когда я пишу новую версию, обновляйте «до» в предыдущей версии, чтобы она соответствовала новой версии. Тем не менее, я не нашел способ сделать это атомарно или с возможной согласованностью, то есть несколько обновлений могут привести к хаосу и создать неоднозначные временные рамки. (Двойные записи для одной и той же временной точки)
Любые идеи?
редактировать нежелательного Примера запрос для # 1
db.my_objs.find({
data : {
$elemMatch : {
from : {
$lte : ISODate('2015-01-01')
}
}
}
}, {
"data.$" : 1
}).forEach(function (obj) {
if(obj.data[0].state == 'active') {
printjson(registrar)
}
})–
могли бы вы показать запрос для 'точки 1'? – profesor79
Как я уже писал, я не смог выразить такой запрос? – Rawler
ОК, получил это - думал, что у вас был набросок этого – profesor79