CouchDB «Соединить» два документа

У меня есть два документа, которые выглядят примерно так:

Doc
{
  _id: AAA,
  creator_id: ...,
  data: ...
}

DataKey
{
  _id: ...,
  credits_left: 500,
  times_used: 0,
  data_id: AAA
}

Я хочу создать представление, которое позволило бы мне передать идентификатор DataKey (key = DataKey _id ) и получить информацию о DataKey и Doc.

Моя попытка:

Сначала я попытался встроить DataKey в Doc и использовал такую ​​функцию карты:

function (doc)
{
  if (doc.type == "Doc")
  {
    var ids = [];
    for (var i in doc.keys)
      ids.push(doc.keys[i]._id);

    emit(ids, doc);
  }
}

Но я столкнулся с двумя проблемами:

  1. Может быть несколько ключей DataKey на Док так, используя startkey = [idhere ...] и endkey = [idhere ..., {}] - нет работает (работает, только если ключ случился быть первым в массиве).
  2. Все ключи данных должны быть уникальными, и я бы предпочел не создавать отдельный документ, например {_id = datakey}, чтобы зарезервировать ключ.

Есть ли у кого-нибудь идеи, как Я могу это сделать? Сообщите мне, если что-то неясно.

----- РЕДАКТИРОВАТЬ -----

Я забыл упомянуть, что в моем приложении я не знаю, что такое идентификатор документа, поэтому мне нужно иметь возможность поиск по идентификатору DataKey.

13
задан Obto 17 June 2011 в 04:06
поделиться