Как я могу передать параметры в представление с помощью cradle (CouchDB)

#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) { … });