CouchDB внутреннее соединение по полю документа? - PullRequest
3 голосов
/ 25 января 2011

У меня есть вопрос, у меня есть 2 вида документов, один из которых такой:

{
  "type": "PageType",
  "filename": "demo"
  "content": "zzz"
}

, а другой такой:

{
  "type": "PageCommentType",
  "refFilename": "demo"
  "content": "some comment content"
}

мне нужно выдатьдокумент, содержащий поле .comments, являющееся массивом документов PageCommentType, на которые я ссылаюсь при условии имя файла документа PageType == поля PageFommentType refFilename документа.

{
  "filename": "demo",
  "comments": [{}, {}, {}]
}

У кого-нибудь есть предложения по его реализации?

Спасибо.

1 Ответ

4 голосов
/ 25 января 2011

Вам нужно просмотреть параметры сортировки . Издайте оба в одном и том же виде, используя filename в качестве ключа и идентификатор типа, чтобы различать комментарии и исходный контент:

function(doc) {
  if (doc.type == "PageType") emit([doc.filename,0],doc.content);
  if (doc.type == "PageCommentType") emit[doc.refFilename,1],doc.content);
}

При поиске документа demo и его комментариев выполните запрос с startkey=["demo",0] и endkey=["demo",1]: вы получите содержимое страницы, за которым следуют все комментарии.

Как только у вас есть все данные , которые вы хотите, но они не в правильном формате , вы почти закончили. Просто напишите функцию _list, чтобы прочитать все строки и вывести окончательный документ JSON с нужной вам структурой / схемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...