Я ищу CouchDB, эквивалентный "объединениям SQL".
В моем примере есть документы CouchDB, которые являются элементами списка:
{ "type" : "el", "id" : "1", "content" : "first" }
{ "type" : "el", "id" : "2", "content" : "second" }
{ "type" : "el", "id" : "3", "content" : "third" }
Существует один документ, который определяетlist:
{ "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
}
}
}
Это насколько я могу получить.Можете ли вы исправить мои ошибки и написать функцию сокращения?Помните, что третий документ не должен быть частью результата.
Конечно, вы также можете написать другую функцию карты.Но структура документов (один документ с определенным элементом и документ для каждой записи) не может быть изменена.
РЕДАКТИРОВАТЬ: не пропустите комментарий Джейсона Смита к своему ответу, где он описывает, как это сделатькороче.