2015-09-04 5 views
1

Это один из образца документа, который я сохранил в моем ведре,Couchbase получить документы для данного диапазона дат с ключом

{ 
    "id": "639882607203778560", 
    "text": "How does Andy Reid describe the no WR touchdown stat?", 
    "name": "chiefs", 
    "createdAt": 1441394876000, 
} 

Мне нужно получить документы для имени и диапазона дат. Так что это мнение я создал для него,

function (doc, meta) { 
    if (doc._class == "com.link.data" && doc.createdAt && doc.name) { 
    emit([doc.createdAt,doc.name], null); 
    } 
} 

Это даст мне все документы для данного диапазона дат, но это не фильтр на основе имени. У меня есть все документы с другими именами. Как я могу это достичь? И какова правильная реализация для java?

Это мой текущий имп, и я хочу сделать это, не используя N1ql.

query.setRange(ComplexKey.of(1441376400000L, name), ComplexKey.of(1441396800000L,name)); 

Я пытался добавить диапазон как Клавишапуск и endKey.Then поставить имя в качестве ключа в couchbase UI и он не работает.

ответ

1

Отказ от ответственности: У меня нет большого опыта с сложными/сложными ключами в CB.

Я считаю, что то, о чем вы просите, не может быть сделано с помощью одного вида: сортировка по дате, а затем фильтрация по определенному имени. You может сортировать по диапазону и затем группировать по имени, но вы все равно получите все различные имена в ковше (как вы уже заметили).

Что вы можете сделать, это использовать два отдельных взглядов и затем пересекаются результаты: получить Doc-идентификаторы с именем, которое вы хотите, получить документы в диапазоне вы хотите, и найти пересечения в коде Java. Поскольку представления только «в конечном итоге согласуются», ваши результаты так же хороши, как и с одним запросом на просмотр, поэтому единственное, что вы тратите впустую, это пропускная способность и немного времени, но не результат-точность.

0

«данный» означает точное соответствие? Если вы хотите получить результат с точным соответствием имя с диапазоном дат, попробуйте испускают() с:

emit([doc.name, doc.createdAt], null); 

сам массив ключей, функция первого аргумента в Emit(), является порядок сортировки.

Смежные вопросы