如何在couchDB中使用用户键从所有用户条目中获取唯一和返回用户数

i5desfxk  于 2023-08-01  发布在  CouchDB
关注(0)|答案(1)|浏览(186)

我有一个名为“username”的键,它在couchDB中存储具有唯一用户ID的用户逻辑记录。现在,我想在Map和Reduce函数的帮助下,使用键“username'”从这些记录中获取唯一的用户计数并返回用户计数。
以下是我目前的功能:

Map:

function (doc) {
  if(doc.username){
    emit([doc.username],{id: doc.username});
  }
}

字符串

Reduce:

function (keys, values, rereduce) {
  if(!rereduce){
    return values;
  }
  var array = [];
  for(var i=0;i<values.length;i++){
    array = array.concat(values[i]);
  }
  var user = {};
  var returning = {};
  for(var j=0;j<array.length;j++){
    if(!user[array[j].id]){
      user[array[j].id] = array[j].con;
    } else if(user[array[j].id] != array[j].con) {
      returning[user[array[j].id]] = 1;
    }
  }
  array[0]['unique'] = Object.keys(user).length;
  array[0]['returning'] = Object.keys(returning).length;
  return array;
}

输出:

{
  "rows": [
    {
      "key": null,
      "value": [
        {
          "id": "user1",
          "unique": 81,
          "returning": 66
        },
        {
          "id": "user2"
        },
        {
          "id": "user3"
        },
        {
          "id": "user4"
        }
      ]
    }
  ]
}


我得到的是整个条目的详细信息,而不是我只想要唯一和返回用户的计数从关键'username'。

d8tt03nd

d8tt03nd1#

你在这里做的工作太多了

Map:

function(doc) {
  if(doc.username) {
    emit(doc.username, 1);
  }
}

字符串

reduce:

function(keys, values) {
  return sum(values);
}


然后在查询视图时提供group=true查询参数。

相关问题