#node.js #couchdb #cradle
#node.js #couchdb #cradle
Вопрос:
Используя 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)
{
});
Комментарии:
1. Вы имеете в виду, когда вы запрашиваете представление, как бы вы передали, например, descending=true в querystring?
Ответ №1:
Если вы запрашиваете представление, попробуйте передать второй параметр в качестве объекта options с вашими настройками, например:
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.
Редактировать:
Насколько я знаю, вы не можете создать представление в CouchDB, куда вы передаете свой пользовательский параметр, который будет использоваться в коде функции map / reduce. Вы должны выдавать ключи из своей функции map, и на их основе вы можете запрашивать представление с такими параметрами, как startkey
и endkey
. Попробуйте посмотреть на запросы к базе данных в статье CouchDB Way.
Комментарии:
1. Но параметр по убыванию является стандартным параметром CouchDB. Я хотел бы передать пользовательский параметр. Я обновил свой вопрос.
Ответ №2:
db.get('vader', function (err, doc) {
doc.name; // 'Darth Vader'
assert.equal(doc.force, 'dark');
});
Похоже, что искомое значение (параметр) здесь является «темным» из всех принудительных ключей?
Cradle также может извлекать несколько документов, если у вас есть список идентификаторов, просто передайте массив, чтобы получить:
db.get([‘luke’, ‘vader’], функция (ошибка, doc) { … });