Лучший способ сделать «ПРИСОЕДИНЕНИЕ» один-ко-многим в CouchDB

Я ищу CouchDB, эквивалентный "SQL-соединениям".

В моем примере есть документы CouchDB, которые являются элементами списка:

{ "type" : "el", "id" : "1", "content" : "first" } 
{ "type" : "el", "id" : "2", "content" : "second" } 
{ "type" : "el", "id" : "3", "content" : "third" } 

Есть один документ, который определяет список:

{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }

Как вы можете видеть, третий элемент был удален, он больше не является частью списка. Так что это не должно быть частью результата. Теперь я хочу представление, которое возвращает элементы содержимого, включая правильный порядок.

Результат может быть:

{ "content" : ["second", "first"] }

В этом случае порядок элементов уже в порядке. Еще один возможный результат:

{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }

Я начал писать функцию карты:

map = function (doc) {
  if (doc.type === 'el') {
    emit(doc.id, {"content" : doc.content}); //emit the id and the content
    exit;
  }
  if (doc.type === 'list') {
    for ( var i=0, l=doc.elements.length; i<l; ++i ){
      emit(doc.elements[i], { "order" : i }); //emit the id and the order
    }
  }
}

Это насколько я могу получить. Можете ли вы исправить мои ошибки и написать функцию сокращения? Помните, что третий документ не должен быть частью результата.

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

РЕДАКТИРОВАТЬ: не пропустите комментарий Джейсона Смита к его ответу, где он описывает, как сделать это короче.

Ответы на вопрос(1)

Ваш ответ на вопрос