如何返回CouchDB中保存的不同值的摘要

如何返回CouchDB中保存的不同值的摘要,couchdb,Couchdb,给定CouchDB中保存的对象集合,如下所示: { "_id": "-5739365454", "_rev": "1-d55b2651b214113bab0b4c18a401eaef", "userId": "mike", "remoteAddr": "77.102.112.205" } { "_id": "-573936626", "_rev": "1-778bbf1c0e5cfe8bbd83dbe618e8b549", "userId": "mik

给定CouchDB中保存的对象集合,如下所示:

{
   "_id": "-5739365454",
   "_rev": "1-d55b2651b214113bab0b4c18a401eaef",
   "userId": "mike",
   "remoteAddr": "77.102.112.205"
}

{
   "_id": "-573936626",
   "_rev": "1-778bbf1c0e5cfe8bbd83dbe618e8b549",
   "userId": "mike",
   "remoteAddr": "77.102.112.205"
}
...
{
   "_id": "-573954545",
   "_rev": "1-4350856f40c091156f8bb984a5559ebd",
   "userId": "jeff",
   "remoteAddr": "77.102.112.205"
}
我希望创建一个输出视图,该视图为我提供一组类似于以下伪输出的结果-在语法上无效:

userId     count
mike       2
jeff       1
...
因此,对于数据库中每个不同的userId,输出中将存在一个“row”/元素,以及该userId在数据库中存在的次数

到目前为止,我有以下几点:

{
   "_id": "_design/myObj",
   "_rev": "4-cd468634f4fb6bef500753fedcb35e27",
   "views": {
       "by_userId": {
           "map": "function(doc) { if (doc.userId) { emit (doc.userId, doc._id)} }",
           "reduce": "_stats"
       }
   },
   "language": "javascript"
}

。。。但这并没有按要求发挥作用。感谢您的帮助

您可以尝试使用_count内置函数。例如:

`
{
    "_id": "_design/myObj",
    "_rev": "4-cd468634f4fb6bef500753fedcb35e27",
    "views": {
        "by_userId": {
            "map": "function(doc) { if (doc.userId) { emit (doc.userId, null)} }",
           "reduce": "_count"
       }
   },
   "language": "javascript"
}`

示例中的三个文档都具有相同的_id和_rev值。这只是一个复制粘贴错误吗?是的,只是一个粘贴错误,而我为了这个问题模拟了这个例子。让我纠正一下。哦,运行视图时得到了什么结果?视图看起来根本不工作,根本没有输出?您可以访问couchdb日志文件吗?这只是返回数据库中对象的总数:{rows:[{key:null,value:29}]}您是否使用Futon接口couchdb:5984/\u utils?也许您忘记了检查接口上的“reduce”字段。我已经做了很多了。不,我直接通过HTTP使用设计中的视图查询数据库。如果我错过了reduce函数,我会期望返回一个对象列表,并键入userId。然而,我得到了数据库中所有具有userId属性的对象的计数,这向我表明reduce函数正在被考虑。