Эмуляция динамических параметров с представлениями - PullRequest
2 голосов
/ 08 апреля 2011

Рассмотрим следующую структуру документа ...

{
    _id,
    _rev,
    postTitle,
    postBody
}

Я пишу небольшое приложение для блога nodeJS, в котором мои URL должны отражать заголовок сообщения. Например /WebLog/Posts/View/Hello-World/.

Поскольку невозможно запросить CouchDB ни о чем, кроме свойства _id, имеет ли смысл создавать представление для каждого сообщения, чтобы сопоставить postTitle с _id?

Как бы вы поступили, если бы запрашивали другие свойства документа, кроме _id?

... Должен ли я просто отказаться от использования MongoDB или MySQL? Я слишком много спрашиваю о CouchDB?

Ответы [ 3 ]

1 голос
/ 10 апреля 2011

Представления - это то, как вы создаете индексы в CouchDB. Чтобы получить документы по postTitle, используйте представление, ключи которого postTitle s, и запросите его с помощью key=<title> и includedocs=true.

{
    "views": {
        "by-post-title": {
            "map": "function(doc) { emit(doc.postTitle, null); }"
        }
    }
}

И запрос: GET /<db>/_design/<design>/_view/by-post-title?includedocs=true&key="Hello-World"

Подробнее о представлениях CouchDB на CouchDB Wiki .

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

Вы частично ответили на свой вопрос, но да, вы создадите представление, как упоминалось ранее ответчиком.

"views": {
    "by-post-title": {
        "map": "function(doc) { 
            if(doc.postTitle){
                var titleURL = postTitle.split(" ").join("_");
                emit(doc.titleURL, {"body" : doc.postBody, "title": doc.postTitle);
            }

        }"
    }
}

сейчас, http://yourcouchdb:yourport/yourdb/_design/by-post-title/_view/by-post-title?key="Hello_World" вернет ваш postBody и postTitle.

Поскольку ваши документы могут содержать другие значения key: лучше не возвращать весь документ в качестве второго параметра в вызовах emit.

0 голосов
/ 08 апреля 2011

Пожалуйста, не делайте просмотр каждого поста, который кажется болезненным для поддержания.Тем не менее, вы можете использовать Django (с Couchdb) или Couchapp, и оба имеют хорошие возможности переписывания URL.Кроме того, посмотрите на это на веб-сайте couchone:

couchdb переписывает в 0.11

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