Найти один документ, используя doc._id и другой параметр - PullRequest
0 голосов
/ 20 октября 2018

Мне не удалось найти ответ на этот вопрос, поэтому я задаю вопрос:

У меня есть БД, в которой хранятся документы, которые имеют различные свойства, включая uuid, который представляет пользователя, который являетсяВ настоящее время с помощью приложения.Мне нужно получить один документ по его полю _id, но я хочу, чтобы он возвращался только в том случае, если поле uuid соответствует текущему пользователю.Я знаю только текущего пользователя uuid во время выполнения, поэтому запрос должен быть динамическим.

Я пытался решить эту проблему с помощью нескольких различных типов представлений и запросов.Последняя попытка приведена ниже.

Просмотр внутри проектного документа:

    "current_user_passed_id": {
        "map": "function(doc){ if(doc.type && doc.type == 'my_doc' && doc._id && doc.uuid) emit([doc._id, doc.uuid], doc)}"
    }

Запрос:

/db/design/_design_name/_view/current_user_passed_id?key=["6e08fe0e990f73593300df411f023ec4", "9698fde5-99b9-4693-8f78-b2ae8a7f03e0"]

В приведенном выше запросе 6e08fe0e990f73593300df411f023ec4 - это doc._id и 9698fde5-99b9-4693-8f78-b2ae8a7f03e0 это doc.uuid

1 Ответ

0 голосов
/ 20 октября 2018

Функции карты Couch DB всегда имеют свойство _id, поэтому проверка не требовалась в условии функции.Мне также нужно было использовать параметры запроса startkey и endkey в моем запросе вместо параметра key.startkey и endkey оба берут один и тот же массив, так как я только после одного документа.

Ниже приведен мой исправленный и рабочий код:

Просмотр внутренней части проектного документа:

    "current_user_passed_id": {
        "map": "function(doc){ if(doc.type && doc.type == 'key_doc' && doc.uuid) emit([doc._id, doc.uuid], doc)}"
    }

Запрос:

/db/_design/keys/_view/current_user_passed_id?startkey=["6e08fe0e990f73593300df411f023ec4", "9698fde5-99b9-4693-8f78-b2ae8a7f03e0"]&endkey=["6e08fe0e990f73593300df411f023ec4", "9698fde5-99b9-4693-8f78-b2ae8a7f03e0"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...