У меня есть база данных mongodb с миллионами документов, представляющих события. Каждый документ имеет временную отметку. Я хочу оценить прошедшие между событиями. Более длительные времена более значительны, чем более короткие времена. Как это можно сделать эффективно?Как вычислить время между соседними документами в MongoDB?
ответ
Я смог получить следующий код для работы.
db.main.find()
.forEach(function(doc){
//print('got1 id: ' + doc._id);
db.main.find({'_id': {$gt: doc._id}, user: doc.user})
.sort({'_id': 1})
.limit(1)
.forEach(function(doc2){
//print('got2 id: ' + doc2._id);
print(doc._id + ': ' + (ISODate(doc2.startT).getTime() - ISODate(doc.startT).getTime()));
})
}
);
Могут быть другие способы решения этой проблемы, которые меня также интересуют, поскольку у меня есть чему поучиться.
Ну, я думаю, что короткий ответ заключается в том, что это, вероятно, не будет тем, что вы можете вычислить с помощью запроса. Ваш тег для этого говорит о том, что вы можете искать запрос, чтобы вычислить это, но я не думаю, что это будет возможно.
Это также не похоже на то, что здесь работает работа с картами.
Если вы буквально нуждаетесь в вычисленных различиях между каждым событием, то вам, вероятно, придется искать хруст над этими значениями и хранить результаты где-то. Или вы могли бы вычислить их спереди, когда вы вставляете каждое новое событие и храните их где-нибудь.
Несмотря на это, это звучит так, как будто вам нужно написать что-то, что вычисляет это в своей собственной повестке дня и сохраняет результат где-то для вас.