使用设计文档将元素添加到列表

Using Design Documents to add an element to a list

用户可以在我的网站上按下一个按钮来声明对课程的兴趣。对于每门课程,我的 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 来 运行 设计文档,但我的 PHP 代码应该没有任何问题。我在 CouchDB 日志中看到 CouchDB 很好地接收了用户名。

直接问题是 req object 没有名为 "name" 的字段,所以:

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

相当于:

doc['userList'] = undefined

如果用户已登录,您可能打算直接使用 userCtx req.userCtx.name,或者如果您已将其添加为参数,则 req.query.name

更一般地说,您可能打算将他们的名字推送到数组中,如果 class 注册量不是很大,这可能没问题。另一种方法是为每个用户+class生成一个独立的文档,并依靠浏览量来计算它们。