Запрос кушетки по передаче параметра

У меня есть документы отчета о диванной базе, хранящиеся в следующем формате:

{
   "agree_allowed":true,
   "assigned_by":"",
   "assigned_to":"",
   "closed":[

   ],
   "comments_allowed":true,
   "details":"Test",
   "email":"",
   "status":"In Progress",
   "subscribed":{
      "user_cfd29b81f0263a380507":true,
      "user_cfd29b81f0263a380508":true,
      "user_cfd29b81f0263a380509":true,
      "user_cfd29b81f0263a3805010":true
   },
   "summary":"Test",
   "time_open":0,
   "timestamp":"2015-07-17T15:34:30.864Z",
   "type":"report",
   "user_id":"user_cfd29b81f0263a380507",
   "username":"test17"
}

json содержит подписанный файл, это список user_id, которые следят за отчетами. Проблема в том, что я должен выдать документ отчета, если подписанное поле содержит user_id, если я передаю user_id = 'user_cfd29b81f0263a380507' в качестве ключевого параметра. мне интересно, как можно использовать user_id для сравнения в представлении

вот код, который я пишу: -

function map(doc, meta) {
        if (doc.type == 'report' && doc.subscribed) {
            for (var user_id in doc.subscribed) {
                emit(doc.user_id, doc);
            }

        }
    }

но он не вернул ожидаемого результата. Кто-нибудь может помочь.


person rash111    schedule 29.07.2015    source источник
comment
Можете ли вы обновить вопрос с выводом, который вы получили?   -  person Paddy    schedule 29.07.2015
comment
не совсем уверен, чего вы пытаетесь достичь. может быть, вы можете привести пример? также - не выдавайте весь документ как значение. Либо выдайте его имя (и позже получите его), либо используйте опцию прикрепить документ, чтобы прикрепить документ к результату. Отправляя документ, вы тратите место на диске.   -  person FuzzyAmi    schedule 29.07.2015
comment
я хочу, чтобы все данные отчета, которые подписались на этот отчет. поэтому я просто меняю эмиссию следующим образом (подписчик, документ). Это нормально?   -  person rash111    schedule 30.07.2015


Ответы (1)


Если я понимаю ваш вопрос, я думаю, вы хотите иметь возможность запрашивать пользователей, которые подписались.

Если это так, код представления неверен, он отправляет doc.user_id, а не user_id, что является переменной, которой вы присваиваете значения в цикле, но никогда не используете. В любом случае, я думаю, что было бы лучше использовать разные имена, чтобы избежать путаницы.

function map(doc, meta) {
        if (doc.type == 'report' && doc.subscribed) {
            for (var subscriber in doc.subscribed) {
                emit(subscriber);
            }
        }
    }

Чтобы запросить пользователей, которые подписались, вы должны использовать key=user_cfd29b81f0263a380507. Результат будет:

{
  "total_rows": 4,
  "rows": [
    {
      "id": "docs",
      "key": "user_cfd29b81f0263a380507",
      "value": null
    }
  ]
}
person Paddy    schedule 30.07.2015
comment
ты понял мой вопрос. Но я хочу, чтобы все данные отчета, которые подписались на этот отчет. поэтому я просто меняю эмиссию следующим образом (подписчик, документ). Это нормально? в ответе json я получаю данные _sync, и это слишком много, есть ли способ удалить данные _sync из результата? - person rash111; 30.07.2015
comment
W.R.T emit(subscriber,doc) вы должны увидеть комментарий @FuzzyAmi в вопросе. Выдача всего документа замедлит работу по мере увеличения нагрузки. В SDK есть вспомогательные функции для получения всего документа через управляемый кэш. Что будет гораздо быстрее. Какой SDK вы используете? - person Paddy; 30.07.2015
comment
я не использовал какой-либо SDK, я пишу представления и доступ через код Python, это лучший подход? или я должен использовать Python SDK - person rash111; 30.07.2015