Использование конструкторских документов для добавления элемента в список - PullRequest
2 голосов
/ 15 апреля 2020

Пользователи могут нажать кнопку на моем веб-сайте, чтобы заявить о своей заинтересованности в курсе. Для каждого курса есть документ в моей установке CouchDB. Эти документы выглядят так:

{
  "_id": "...",
  "_rev": "...",
  "name": "...",
  "description": "...",
  "userList": []
}

Когда пользователь нажимает кнопку, его имя должно быть добавлено в «userList». Я написал проектный документ для этого:

{
  "_id": "_design/updateList",
  "_rev": "...",
  "updates": {
     "addUser": "function(doc, req) {doc['userList'] = req['name']; var message = 'user added'; return [doc, message];}",
  }
} 

Я знаю, что это не может быть правильным решением, потому что список никогда не может быть длиннее, чем одно имя пользователя, подобное этому. Однако даже это не работает. Когда я нажимаю на кнопку, строка "" userList ": []" исчезает из соответствующего документа.

В чем здесь проблема? Я использую PHP -On-Couch для запуска Design Document, но в моем коде PHP не должно быть никаких проблем. В журнале CouchDB я вижу, что CouchDB получает имя пользователя просто отлично.

1 Ответ

1 голос
/ 17 апреля 2020

Непосредственная проблема состоит в том, что объект req не имеет поля с именем "name", поэтому:

doc['userList'] = req['name']

эквивалентно:

doc['userList'] = undefined

возможно, вы имели в виду использовать userCtx req.userCtx.name напрямую, если пользователи вошли в систему, или req.query.name, если вы добавили его в качестве параметра.

В более широком смысле вы, вероятно, имели в виду sh их имя в массиве, что, вероятно, хорошо, если регистрация класса не очень большая. Альтернативный подход заключается в создании независимого документа для каждого пользователя + класса и полагаться на представления для их подсчета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...