то, что казалось простой задачей, стало для меня испытанием.
У меня следующая структура mongodb:
{
(...)
"services": {
"TCP80": {
"data": [{
"status": 1,
"delay": 3.87,
"ts": 1308056460
},{
"status": 1,
"delay": 2.83,
"ts": 1308058080
},{
"status": 1,
"delay": 5.77,
"ts": 1308060720
}]
}
}}
Теперь следующий запрос возвращает весь документ:
{ 'services.TCP80.data.ts':{$gt:1308067020} }
Интересно - могу ли я получить только те записи массива "data", которые соответствуют критериям $ gt (вид сокращенного документа)?
Я рассматривал MapReduce, но не смог найти ни одного примера о том, как передать внешние аргументы (timestamp) в функцию Map (). (Эта функция была добавлена в 1.1.4 https://jira.mongodb.org/browse/SERVER-401)
Кроме того, всегда есть альтернатива написанию функции StorageJs, но, поскольку мы говорим о больших объемах данных, здесь нельзя допускать блокировки db.
Скорее всего, мне придется переделать структуру до уровня 1-го уровня, например:
{
status:1,delay:3.87,ts:138056460,service:TCP80
},{
status:1,delay:2.83,ts:1308058080,service:TCP80
},{
status:1,delay:5.77,ts:1308060720,service:TCP80
}
, но БД резко возрастет, поскольку «служба» - это только одна из многих опций, которые будут добавлять каждый документ.
пожалуйста, совет!
заранее спасибо