1

嗨,所以我是 CouchDB 的新手,到目前为止看起来很棒,但真的很努力做必须简单的事情!

我的文件结构如下:

{
   "_id" : "245431e914ce42e6b2fc6e09cb00184d",
   "_rev": "3-2a69f0325962b93c149204aa3b1fa683",
   "type": "student",
   "studentID": "12345678",
   "Name": "Test",
   "group: "A"
}

并希望通过诸如http://couchIP/student?group=A或类似的查询来访问它们。视图是我在这里需要的吗?我不明白如何从 Views 的 Map 函数中的查询中获取参数。例子:

function(doc,req) {
   if(req.group==='A'){
        emit(doc.id, doc.name);
   } 
}

我对 Couch 如何工作的理解是错误的还是我的问题是什么?在此先感谢,我确定这是 Couch 101

已经阅读了http://guide.couchdb.org/但它并没有真正回答这个问题!

4

3 回答 3

1

您需要进一步阅读视图以及它们返回键/对值的相关性。

目前还不清楚你想从视图中返回什么,所以我猜。如果您想返回整个文档,您将创建一个如下视图:

function (doc) { emit(doc.group, doc) };

这会将组名作为您可以查找的键发出,当您查找时,整个文档将作为值返回。

如果您只想访问这些用户的名称,您可以执行以下操作:

function (doc) { emit(doc.group, doc.name) };
于 2013-02-02T18:13:51.680 回答
1

您的问题源于对 aview作用的误解。视图用于map/reduce生成数据的表示。您无法控制查询中视图的输出,因为视图仅根据数据库文档中的更改进行更新。

使用 alist也不是一个好的选择。您似乎可以list根据查询参数在您的请求中使用您的请求知识来生成不同的输出,但这是错误的,因为 couchdbETags用于缓存,这意味着大多数时候无论您的列表参数如何,您都会得到相同的答案,因为基础文件不会改变。在这种情况下,虽然有一个技巧可以欺骗 couchdb,这意味着使用两个不同的交替用户,但我什至不会尝试这种方式,因为肯定有更简单的方法可以实现您的目标,并且您可以使用group作为密钥来解决您的问题你的地图功能。

于 2013-02-03T20:21:55.550 回答
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 重写选项。

于 2013-02-04T05:21:06.290 回答