【问题标题】:Find The Duplicate value in CouchDb在 CouchDb 中查找重复值
【发布时间】:2015-11-19 19:14:55
【问题描述】:

我想在 CouchDB 中找到相同的值。我的地图是

function(doc) {
    var user = [];
if(doc.type = 'user'){
   user.push(doc.name);
    emit( doc.type, user);
  }
}

我有类似的结果

["Bob"],["Peter"],["Bob"] ....

我想要一个减少喜欢的人

["Bob","Peter","Bob"] 

或只有重复的数组

["Bob","Bob"] 

我不明白 reduce 的工作原理。 foreach 值 reduce 被调用还是仅在映射完成时调用?

【问题讨论】:

    标签: couchdb couchdb-futon


    【解决方案1】:

    假设您有以下三个文件。

    鲍勃:

    {
      "_id": "89d9ffe10a33df504ecc8d7c9a975eed",
      "_rev": "1-dfc3128d8d80760f2cf40328dd24553e",
      "type": "user",
      "name": "Bob"
    }
    

    彼得:

    {
      "_id": "89d9ffe10a33df504ecc8d7c9a98a0c6",
      "_rev": "1-820e231c44f9b3125db79e0c00bbc050",
      "type": "user",
      "name": "Peter"
    }
    

    另一个鲍勃:

    {
      "_id": "89d9ffe10a33df504ecc8d7c9a99f360",
      "_rev": "1-dfc3128d8d80760f2cf40328dd24553e",
      "type": "user",
      "name": "Bob"
    }
    

    您想查找具有重复 name 值的文档。只需使用以下映射函数在 name 字段上创建一个视图:

    function (doc) {
      if (doc.type == "user") {
        emit(doc.name);
      }
    }
    

    使用内置的_count reduce 函数。如果用reduce=false查询这个视图,会得到如下结果:

    {
      total_rows: 3,
      offset: 0,
      rows: [
        {
          id: "89d9ffe10a33df504ecc8d7c9a975eed",
          key: "Bob",
          value: null
        },
        {
          id: "89d9ffe10a33df504ecc8d7c9a99f360",
          key: "Bob",
          value: null
        },
        {
          id: "89d9ffe10a33df504ecc8d7c9a98a0c6",
          key: "Peter",
          value: null
        }
      ]
    }
    

    由于这些结果按name 整理(排序),重复的name 值将在结果中彼此相邻。

    或者,您可以使用group=true 查询此视图,您将获得以下结果:

    {
      rows: [
        {
          key: "Bob",
          value: 2
        },
        {
          key: "Peter",
          value: 1
        }
      ]
    }
    

    value 大于等于2 的任何结果都表示存在重复项。确定"Bob" 的键存在重复条目后,您可以使用reduce=false&key="Bob" 查询所有"Bob"s,这将为您提供以下结果:

    {
      total_rows: 3,
      offset: 1,
      rows: [
        {
          id: "89d9ffe10a33df504ecc8d7c9a975eed",
          key: "Bob",
          value: null
        },
        {
          id: "89d9ffe10a33df504ecc8d7c9a99f360",
          key: "Bob",
          value: null
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-30
      • 2017-03-16
      • 2010-10-15
      • 2011-11-09
      • 1970-01-01
      • 2019-12-06
      • 2020-07-09
      相关资源
      最近更新 更多