在CouchDB中,如何从REST调用中获取参数

时间:2013-02-02 17:56:25

标签: json rest couchdb

嗨,所以我对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/阅读,但它并没有真正回答这个问题!

3 个答案:

答案 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重写选项。