使用设计文档将元素添加到列表
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生成一个独立的文档,并依靠浏览量来计算它们。
用户可以在我的网站上按下一个按钮来声明对课程的兴趣。对于每门课程,我的 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生成一个独立的文档,并依靠浏览量来计算它们。