Я ищу эквивалент 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
}
}
}
Это насколько я могу получить. Можете ли вы исправить мои ошибки и написать функцию сокращения? Помните, что третий документ не должен быть частью результата.
Конечно, вы также можете написать другую функцию карты. Но структура документов (один документ с определенным элементом и документ ввода для каждой записи) не может быть изменена.
EDIT: Не пропустите комментарий Джейсона Смита к его ответу, где он описывает, как сделать это короче.