Просмотр couchbase с использованием нескольких клавиш для получения результата

У меня есть следующий документ

{

   "Credit_Amount": 99,
   "Acc_no": 138,
   "Job_No": "esmwga",
   "Source_No": "x",
   "Temp": 1017,
   "Document_No": "gaf",
   "Debit_Amount": 67,
   "User_Id": "xirbzsewiw"
}

и моя функция карты это

function (doc, meta) {
    if(doc.Type == "GLEntry")
    {
      emit([doc.Acc_no,doc.User_Id],[doc.Credit_Amount,doc.Debit_Amount]);
    }
}

и это моя функция сокращения

function(key,values,rereduce){
  var sum1=0,sum2=0;
  for(var i=0;i<values.length;++i)
  {
    sum1+=values[i][0];
    sum2+=values[i][1];
  }
  return ([sum1,sum2])
    }

когда я передаю этот ключ

[138,"xirbzsewiw"]
group level 2

Я получаю этот вывод

[ 99, 67 ]

Но когда я даю это в качестве ключа

[138]
group level 1

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

2 ответа

Решение

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

Вы, вероятно, смущены из-за другого вопроса, который вы задали, где вы используете startkey а также endkey чтобы получить диапазон. С startkey а также endkey вам не нужно указывать точные ключи, первое частичное совпадение будет рассматриваться как начало или конец. В вашем примере, если вы делаете запрос с startkey=[138]&endkey=[139]&inclusive_end=false Вы должны увидеть ожидаемый результат.

Вот то, что я думаю, вероятно, происходит здесь:

  • Ваша функция карты выдает такие ключи, как: [138,"xirbzsewiw"]
  • Вам нужно передать ключ, который ваша функция карты генерирует как "ключи" при выполнении операций сокращения. Во втором случае вы передаете [138], который не является допустимым ключом, поэтому он не соответствует ничему в индексе и, следовательно, вы не видите никакого вывода.

group_level выполняет фильтрацию по выходным данным, т.е. по количеству индексов, которые вы хотите получить из массива строк. Возможно, вы захотите взглянуть на понимание запросов представления на уровне группы, если вам еще не нужно лучше понимать group_level

Другие вопросы по тегам