Как я могу передать параметры в представление, используя колыбель (CouchDB) - PullRequest
3 голосов
/ 07 апреля 2011

Используя cradle , как я могу передать параметры представлению в CouchDB? Обновление

Скажем, я хочу вернуть документы, которые соответствуют свойствам, отличным от _key (по умолчанию) ...

// document format
{
    _key,
    postHeading,
    postBody,
    postDate
}

Что если я хочу сопоставить документыпротив свойства postHeading ... Как мне поступить?Как будет выглядеть представление, и как мне передать строку поиска в это представление?На данный момент я делаю это ...

database.get("980f2ba66d5c8f9c91b9204a4d00022a", function (error, document)
{           
});

Я бы хотел вместо этого получить доступ к представлению, и вместо 40-символьного автоматически генерируемого ключа, я хотел бы передать строку,соответствие другому свойству.

Что-то похожее на это ...

database.save("_design/posts", {
    single: {
        map: function (document)
        {
            if (document.postHeading == PARAMETER_PASSED_GOES_HERE)
                emit(null, document);
        }
    }
});

database.view("posts/single", function (error, documents)
{           
});

Ответы [ 2 ]

3 голосов
/ 07 апреля 2011

Если вы запрашиваете представление, попробуйте передать второй параметр как объект параметров с вашими настройками, например:

db.view('characters/all', {descending: true}, function (err, res) {
    res.forEach(function (row) {
        sys.puts(row.name + " is on the " +
                 row.force + " side of the force.");
    });
});

Также помните об этом:

Некоторые значения параметров строки запроса должен быть в JSON-кодировке.


EDIT:

Насколько я знаю, вы не можете создать представление в CouchDB, где вы передаете свой пользовательский параметр, который будет использоваться в коде функции map / Reduce. Вы должны излучать ключи из вашей функции карты и на их основе вы можете запросить представление с параметрами, такими как startkey и endkey. Попробуйте взглянуть на База данных запросов к статье CouchDB Way .

0 голосов
/ 07 апреля 2011
db.get('vader', function (err, doc) {
    doc.name; // 'Darth Vader'
    assert.equal(doc.force, 'dark');
});

Похоже, что искомое значение (параметр) здесь 'темное' из всех силовых клавиш?

Cradle также может извлекать несколько документов, если у вас есть список идентификаторов, просто передайте массив, чтобы получить:

db.get (['luke', 'vader'], функция (err, doc) {...});

...