Как я могу отобразить вывод CouchDB Complex как это в одном запросе? - PullRequest
1 голос
/ 17 августа 2011

Я просто новичок в couchdb, поэтому я могу неправильно понять точку зрения, чтобы вы могли учить и обсуждать со мной

Тип документа - Пользователь - Тема - Комментарий

Требование - Я хочуwebboard - 1 Запрос на получение этого сложного документа

Вывод Мне нужен KEY "topic-id", VALUE {_id: "topic-id", создал_at: "2011-05-30 19:50:22 ", заголовок:" Hello World ", пользователь: {_id:" user-1 ", тип:" user ", имя пользователя:" dominixz ", подпись:" http://dominixz.com"} comments: [{_id: "comment-1", текст: "Комментарий 1", созданный_ат: "2011-05-30 19:50:22", пользователь: {_id: "пользователь-1", тип: "пользователь", имя пользователя: "dominixz", подпись: "http://dominixz.com"}}, {_id: "comment-2", текст: "Comment 2", create_at: "2011-05-30 19:50:23", пользователь: {_id: "user-2", тип: "user",имя пользователя: "dominixz2", подпись: "http://dominixz1.com"}}, {_id:" комментарий-3 ", текст:" Комментарий 3 ", созданный:" 2011-05-30 19:50:24 ", пользователь: {_id:" пользователь-3 ", тип:" пользователь ", имя пользователя:" dominixz3 ", подпись:" http://dominixz2.com"}},]}

У меня есть данные "user", подобные этим {_id: "user-1", type: "пользователь ", имя пользователя:" dominixz ", подпись:" http://dominixz.com"} {_id: "пользователь-2", тип: "пользователь", имя пользователя: "dominixz2", подпись: "http://dominixz1.com"} {_id:" пользователь-3 ", тип:" пользователь ", имя пользователя:" dominixz3 ", подпись:" http://dominixz2.com"}

"Тема "данные вроде этого {_id:" topic-id ", create_at:" 2011-05-30 19:50:22 ", заголовок:" Hello World ", пользователь:" user-1 "}

Данные «Комментария» выглядят так: {_id: «comment-1», тип: «комментарий», текст: «Комментарий 1», create_at: «2011-05-30 19:50:22», пользователь: «user-1», topic: "topic-id"} {_id: "comment-2", тип: "comment", текст: "Comment 2", creation_at: "2011-05-30 19:50:23", пользователь: "user-2 ", topic:" topic-id "} {_id:" comment-3 ", тип:" comment ", текст:" Comment 3 ", create_at:" 2011-05-30 19:50:24 ", пользователь: "user-3", topic: "topic-id"}

Как я могу написать карту, уменьшить, составить список для получения этих сложных данных?и как насчет того, когда я хочу использовать LIMIT, OFFSET, как в db

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Сложно сказать, что вы ищете здесь, но я думаю вы запрашиваете классическое соединение CouchDB, как описано в этой веб-странице .

Я бы порекомендовал прочитать все это, но изюминка выглядит примерно так (переводится для ваших данных):

function (doc) {
    if (doc.type === 'topic') {
        emit([doc._id, 0, doc.created_at], null);
    } else if (doc.type === 'comment') {
        emit([doc._id, 1, doc.created_at], null);
    }
}

Эта карта вернет идентификатор темы, за которым следуют все ее комментарии вхронологический порядок.null предотвращает слишком большое увеличение индекса, вы всегда можете добавить include_docs=true по вашему запросу, чтобы получить полные документы, когда вам это нужно, или , вы можете использовать лучшие методики индекса, включающие биты, которыетам интересно.

0 голосов
/ 18 августа 2011

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

Если бы я разрабатывал вашу CMS в CouchЯ бы сохранил тему, содержание и комментарии в одном документе.Это напрямую решит вашу проблему.

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

...