嗨,所以我对CouchDB的新手到目前为止看起来很棒,但真的很难解决必须要做的事情!
我的文件结构如下:
{
"_id" : "245431e914ce42e6b2fc6e09cb00184d",
"_rev": "3-2a69f0325962b93c149204aa3b1fa683",
"type": "student",
"studentID": "12345678",
"Name": "Test",
"group: "A"
}
并希望使用http://couchIP/student?group=A
等类似的查询来访问它们。观点是我需要的吗?我不明白如何从视图中的Map函数中的查询中获取参数。例如:
function(doc,req) {
if(req.group==='A'){
emit(doc.id, doc.name);
}
}
我对Couch的工作方式错误或我的问题有什么了解吗?在此先感谢,我相信这是Couch 101
已经通过http://guide.couchdb.org/阅读,但它并没有真正回答这个问题!
答案 0 :(得分:1)
您需要进一步阅读有关视图及其返回键/对值的相关性。
目前还不清楚你想从视图中返回什么,所以我猜。如果要返回整个文档,则需要创建一个视图:
function (doc) { emit(doc.group, doc) };
这会将组名称作为您可以查找的键发出,整个文档将在您查找时作为值返回。
如果您想要访问您想要执行以下操作的用户的姓名:
function (doc) { emit(doc.group, doc.name) };
答案 1 :(得分:1)
你的问题源于对view
的作用的误解。视图使用map/reduce
生成数据表示。您无法控制查询中视图的输出,因为视图仅根据数据库文档中的更改进行更新。
使用list
也不是一个好选择。看起来您可以在list
中使用您的请求的知识来生成不同的输出,具体取决于查询参数,但这是错误的,因为couchdb使用ETags
进行缓存,这意味着您很多时候会无论您的列表参数如何,都可以获得相同的答案,因为基础文档不会更改。在这种情况下,有一个技巧可以欺骗couchdb,这意味着使用两个不同的交替用户,但我甚至不会尝试这种方式,因为肯定有更简单的方法来实现您的目标,您可以使用{{1}解决您的问题}作为地图功能中的一个键。
答案 2 :(得分:1)
您需要观看才能达到预期的效果。
在设计文档的视图中定义以下地图功能。 (让我们将视图命名为“byGroup”,并假设它存在于名为“_design / students”的设计文档中)
function(doc) {
if(doc.group){
emit(doc.group,null);
}
}
可以从以下网址获得结果
http://couchIP:5984/dbname/_design/students/_view/byGroup?startkey="A"&endkey="A"&include_docs=true
要友好的url couchdb还提供了url重写选项。