Функция Couchbase для запроса представления: отправить параметр из Java

У меня есть некоторые данные Couchbase в следующем формате

{
   "id": "12343",
   "transaction": {
        "2018-01-11": 10,
        "2017-12-01" : 20
    },
  "_type": "TransactionData"
}

Я хотел бы получить идентификаторы, список транзакций которых содержит ключ старше заданной даты (например, этот объект не будет получен для значения «2017-11-01», но он будет получен для «2017-12-12» .

Я сделал представление, но я хотел бы параметризовать строку даты:

function (doc, meta) {
  if (doc._type == 'TransactionData') {   

      for (var key in doc.transaction) {
         //I want to send the String value from java
         if (key < "2018-02-21") {
             emit(doc.id, null);
             break;
         }
      }
   }  
 }

Я пытался написать запрос N1QL, но мой сервер этого не позволяет, я не могу изменить эту конфигурацию. Я не думаю, что смогу использовать startKey, потому что я возвращаю карту пар (id, null). Как я могу отфильтровать идентификаторы, у которых есть транзакции старше настраиваемой даты?

Спасибо.


person sonya    schedule 23.02.2018    source источник


Ответы (2)


Вы можете сделать так:

function (doc, meta) {
  if (doc._type == 'TransactionData') {   
      for (var key in doc.transaction) {
         emit(doc.id, null);
      }
   }  
 }

user _count для функции уменьшения, затем вы можете запросить, используя

query.range("2018-02-21", {}).reduce(true)

затем вы можете взять value, чтобы увидеть, сколько строк есть

person Chinh Nguyen    schedule 27.12.2018

Представления являются статическими индексами. Документы обрабатываются один раз после каждого изменения, и любые выдаваемые результаты помещаются в индекс. Вы не можете параметризовать свою функцию, потому что она не запускается повторно для каждого запроса. Таким образом, вы не можете решить проблему так, как вы к ней подходите. (Вы можете сделать это с помощью N1QL.)

Обычно вы решаете эту проблему, добавляя в запрос фильтр диапазона ключей. Посмотрите документацию для запроса представлений. Есть примеры, как выбрать по дате. Вам нужно будет решить, как вы хотите структурировать индекс (представление), который вы создаете.

person Hod    schedule 24.02.2018