Я пытаюсь разобраться с запросами карты / сокращения при использовании PouchDB / CouchDB.
У меня много документов в моей базе данных, но мне нужно создать дизайн, который запрашивает документы и дает мне все уникальные имена команд в качестве ключа, а затем сообщает мне
а) сколько уникальных вардов в каждой команде
б) общее количество работ в команде (по всем подопечным)
Структура моих данных:
{
"_id": "0448071807c0f37f53e06aab54034a42",
"_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
"team": "Team A",
"ward": "Ward A",
"date": "2017-03-30",
"person": "Alice",
"bed": "Bed 001",
"jobs": [1,2,3,4]
}
{
"_id": "0448071807c0f37f53e06aab54034a42",
"_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
"team": "Team A",
"ward": "Ward B",
"date": "2017-03-30",
"person": "Bob",
"bed": "Bed 001",
"jobs": [1,2]
}
{
"_id": "0448071807c0f37f53e06aab54034a42",
"_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
"team": "Team A",
"ward": "Ward C",
"date": "2017-03-30",
"person": "Charles",
"bed": "Bed 001",
"jobs": [9,5]
}
{
"_id": "0448071807c0f37f53e06aab54034a42",
"_rev": "6-13fd78ada9c8833ec36a01af0acd5957",
"team": "Team B",
"ward": "Ward 00",
"date": "2017-03-30",
"person": "David",
"bed": "Bed 001",
"jobs": [1]
}
Результат, который я ожидал, будет таким:
Команда А - 3 уникальных подопечных - 8 заданий
Команда Б - 1 уникальный подопечный - 1 работа
e.g.
{
"key": "Team A",
"value": {
"wards": 3,
"jobs": 8
}
}
{
"key": "Team B",
"value": {
"wards": 1,
"jobs": 1
}
}
Моя карта в настоящее время:
{
"all": {
"map": "function(doc) { emit(doc.team, doc) }"
}
}
Это сокращение, в котором я борюсь.
ИЗМЕНИТЬ
Я принял предложения, использованные в эквиваленте CouchDB View для SUM & GROUP BY Но это только половина моей задачи.
Если я использую:
{
"all": {
"map": "function(doc) { emit([doc.team, doc.ward], 1) }",
"reduce": "function(keys, values) { return sum(values); }"
}
}
Затем перейдите к http://my-ip:5984/wardround_jobs/_design/teams/_view/all?group_level=1, то я вижу уникальные команды (хорошо) и количество вхождений (тоже отлично), но я не уверен, как расширить функцию сокращения, чтобы включить общее количество рабочих мест.