2013-02-15 1 views
0

У меня есть база данных mongodb с миллионами документов, представляющих события. Каждый документ имеет временную отметку. Я хочу оценить прошедшие между событиями. Более длительные времена более значительны, чем более короткие времена. Как это можно сделать эффективно?Как вычислить время между соседними документами в MongoDB?

ответ

0

Я смог получить следующий код для работы.

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())); 
       }) 
     } 
    ); 

Могут быть другие способы решения этой проблемы, которые меня также интересуют, поскольку у меня есть чему поучиться.

0

Ну, я думаю, что короткий ответ заключается в том, что это, вероятно, не будет тем, что вы можете вычислить с помощью запроса. Ваш тег для этого говорит о том, что вы можете искать запрос, чтобы вычислить это, но я не думаю, что это будет возможно.

Это также не похоже на то, что здесь работает работа с картами.

Если вы буквально нуждаетесь в вычисленных различиях между каждым событием, то вам, вероятно, придется искать хруст над этими значениями и хранить результаты где-то. Или вы могли бы вычислить их спереди, когда вы вставляете каждое новое событие и храните их где-нибудь.

Несмотря на это, это звучит так, как будто вам нужно написать что-то, что вычисляет это в своей собственной повестке дня и сохраняет результат где-то для вас.