Вопрос

У меня есть пользовательский документ, в котором есть поле группы.Это поле представляет собой массив идентификаторов групп.Я хотел бы написать представление, которое возвращает (groupid как ключ) -> (массив пользовательских документов как val).Эта операция сопоставления кажется хорошим началом.

function(doc)
{
  var type = doc.type;
  var groups = doc.groups;
  if(type == "user" && groups.length > 0)
  {
    for(var i = 0; i < groups.length; i++)
    {
      emit(groups[i], doc);
    }
  }
}

Но явно что-то не так с моей попыткой сокращения:

function(key, values, rereduce)
{
  var set = [];
  var seen = [];
  for(var i = 0; i < values.length; i++)
  {
    var _id = values[i]._id;
    if(seen.indexOf(_id) == -1)
    {
      seen.push(_id);
      set.push(values[i]);
    }
  }
  return set;
}

Я использую CouchDB 0.10dev.Любая помощь приветствуется.

Это было полезно?

Решение

Ответ на этот вопрос после проверки IRC CouchDB заключается в том, что вам вообще не нужно использовать для этого сокращение.Просто укажите key=groupId, примерно так:

http://localhost:5984/somedb/_design/bygroup/_view/all?key=2

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top