考虑这三个文件......
[
{
_id: "...",
_rev: "...",
title: "Foo",
body: "..."
},
{
_id: "...",
_rev: "...",
title: "Bar",
body: "..."
},
{
_id: "...",
_rev: "...",
title: "Hello World!",
body: "..."
},
]
Run Code Online (Sandbox Code Playgroud)
而这种观点......
byTitle: {
map: function (document)
{
emit(document.title, document);
}
}
Run Code Online (Sandbox Code Playgroud)
当我查询视图时,幕后发生了什么?...
GET /database/_design/posts/_view/byTitle?key="Foo"
Run Code Online (Sandbox Code Playgroud)
我最近问过一些关于观点的问题......关于我所说的"动态参数"的问题 ......基本上我想知道怎么做相同的SELECT ... WHERE field = parameter
所有答案都引导我使用临时视图,这些视图非常慢,不应该用于生产.所以我的第二个问题是...... 上面的标题查询方法,适合在生产中使用?或者我是否迫使CouchDB做出无法形容的恐怖,表现明智?...我基本上和使用临时视图一样吗?
我想你误解了一些答案.您可以使用临时视图来测试各种map/reduce函数.当您对代码感到满意时,您应该将其放入设计文档中并使用它进行查询.
临时视图很慢,因为为每个查询构建和删除了索引.将它放入设计文档中,告诉CouchDB不要删除索引并保持更新(这是在查询时完成的).
所以
GET /database/_design/posts/_view/byTitle?key="Foo"
Run Code Online (Sandbox Code Playgroud)
是按标题查询的最快方法,因为它已编入索引.
作为旁注:你可以使用
byTitle: {
map: function (document)
{
emit(document.title, null);
}
}
Run Code Online (Sandbox Code Playgroud)
并查询include_docs=true以节省一些磁盘空间.