【发布时间】:2013-03-18 00:10:30
【问题描述】:
我在 mongo 数据库中有一个文档
user:{
name:'bruce',
surname:'wayne',
job:'batman',
email:'onlyifdanger@batman.com',
}
所以当用户更新信息时,我必须:
- 如果用户存在则查询数据库
- 如果存在则获取数据库的值
- 将数据库的值与用户发送的表单值进行比较
- 如果数据库中的值相等,则放弃该操作
- 如果数据库中的值不同,请使用表单值更新值
- 关闭数据库并发送.response
所以在这种情况下,如果用户发送这个:
form.newUserInfo:{
name:'bruce albert',
surname:'wayne',
job:'batman only at night',
email:'onlyifdanger@batman.com',
}
只需更新姓名和工作。
有什么方法可以在不到 6 个步骤内完成此操作?我正在使用 nodejs v0.10、mongodb 2.2.3、expressjs 和 mongoskin v0.5
【问题讨论】:
-
如果新值与旧值相同,替换它们会有什么危害?请更新您的问题以包含有关为什么您尝试这样做的一些信息,这可以帮助其他人回答您的问题。
-
我同意 Martin 的观点,您通过这六个步骤获得了什么?如果两个人同时编辑记录,他们仍然会覆盖彼此的更改。
-
如果新值与旧值相同,则替换它们没有问题,因为与旧值相同,但是否可以只更改不同的值?另一个问题是当用户第一次插入值时......我必须先检查是否存在......
-
使用 upsert=true 更新将插入不存在的记录。所以你永远不需要检查记录是否已经存在——这无论如何都不是线程安全的。而且您应该只更新他们提供的值,无论它们是否是新的都没有关系 - 当整个事情可以通过一个步骤完成时,您正在使用 6 个步骤做更多的工作。
-
如果一个值不存在会发生什么,比如不需要的工作...更新将是 job=''??
标签: javascript node.js mongodb express mongoskin