如何从CouchDb获得独特的价值?

时间:2013-10-15 16:04:59

标签: node.js couchdb cradle

在couchdb中我有一个数组字段:

numbers:["79998887766","79998887755","79998887766","79998887744"]

在node.js应用程序中,我想只有唯一的数字。就像这样:

["79998887766","79998887755","79998887744"]

可以使用couchdb视图或node.js模块cradle吗? 或者只能通过节点获取所有数字和过滤器数组?

3 个答案:

答案 0 :(得分:1)

相当简单,如果不优雅,迭代遍历数组两次测试重复。因为这是O(n²),所以对于大型阵列来说它不能很好地扩展;如果您希望您的数字数组包含数百或更多项

,我会寻找更复杂的解决方案
function testExists(item, arr2){
  var exists = false;
  arr2.forEach(function(item2){
    if(item === item2){
      exists = true;
    } 
  });
  return exists;
};

function removeDupes(arr){
  var output = [];
  arr.forEach(function(item){
    var exists = testExists(item, output);
    if(!exists){
      output.push(item);
    };
  });
  return output;
};

console.log(removeDupes(["a","b","a","c"]));

答案 1 :(得分:1)

我相信在CouchDB中没有用于实现它的本机命令。问题的一个可能解决方案是使用redis sets之类的东西。还有一些第三方库在Javascript中实现集合,如下所示:https://github.com/PeterScott/simplesets-nodejs

答案 2 :(得分:1)

您可以在获取数据后在CouchDB视图或node.js代码中执行操作。在这两种情况下,您都需要编写javascript代码以排除重复项。您可以使用以下对象:

var obj = {};

numbers.forEach(function (num) {
    obj[num] = true;
});

var unique = Object.keys(obj);

如果按键顺序无关紧要,则可行。在视图中执行此操作是一种更好的方法,因为计算结果将被重用。