Предположим, у вас есть следующие три документа.
Боб:
{
"_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
}
]
}