2015-11-19 3 views
1

Я хочу найти то же значение в CouchDB. Моя КартаНайти Дублирующее значение в 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"] 

Я не понимаю Как уменьшить кс. Вызывается сокращение значения foreach или только когда карта завершена?

ответ

3

Предположим, у вас есть следующие три документа.

Боб:

{ 
    "_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=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", вы можете запросить все из "Bob" с использованием reduce=false&key="Bob", который даст вам следующие результаты:

{ 
    total_rows: 3, 
    offset: 1, 
    rows: [ 
    { 
     id: "89d9ffe10a33df504ecc8d7c9a975eed", 
     key: "Bob", 
     value: null 
    }, 
    { 
     id: "89d9ffe10a33df504ecc8d7c9a99f360", 
     key: "Bob", 
     value: null 
    } 
    ] 
} 
Смежные вопросы