考虑以下文档结构......
{
_id,
_rev,
postTitle,
postBody
}
我正在编写一个小nodeJS weblog应用程序,我希望我的URL能够反映帖子标题。例如/WebLog/Posts/View/Hello-World/
。
由于无法在除了_id属性之外的任何内容上查询CouchDB,为每个帖子创建一个视图是否有意义,以便将postTitle
映射到_id
?
您如何查询除_id
以外的其他文档属性?
......我应该放弃并使用MongoDB或MySQL吗?我对CouchDB的要求太高了吗?
答案 0 :(得分:1)
视图是如何在CouchDB中创建索引的。要按postTitle
获取文档,请使用视图,其中的键为postTitle
,并使用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 views上的CouchDB Wiki。
答案 1 :(得分:1)
你已经部分回答了自己的问题,但是你会创建一个视图,正如之前的回答者所提到的那样。
"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。
由于您的文档可以包含其他键:值,因此最好不要将整个doc作为emit调用中的第二个参数返回。
答案 2 :(得分:0)
请不要对每个帖子进行查看,这听起来很痛苦。但是,您可以使用Django(使用Couchdb)或Couchapp,并且两者都具有良好的URL重写功能。另外,请在couchone网站上查看: