CNode

如何做到 findByIdAndUpdate 仅更新不为空的字段?

问答
Rrankun203发布于11 年前最后回复11 年前5 回复5998 浏览0 收藏

Happy sunshine.

Screen Shot 2015-08-02 at 11.58.56 AM.png

如果要根据传入的参数来更新目标文档的部分数据要怎么做呢?

例如我传入了 creator, 就只更新 creator. 而不是将 update 对象内容全部更新. 同理, 传入 name 就只更新 name.

现在 MongoDB 的 $set 似乎还是得一次性指定所有要更新的参数, 而不能根据传入的值是否为空来确定是否要更新.

类似于 MyBatis 里面的 UpdateSchemaSelective()

谢谢~

如果我这样的想法本身有问题, 请指正, 谢谢~

查看回复

回复 (5)

J
jaywcjlove#1·11 年前
引用 ravenwang封装一下,根据传入的更新对象动态生成带$set的update对象

@ravenwang 不用封装用个最简单的方法 使用underscorejs 中的extend方法

extend_.extend(destination, *sources)

复制source对象中的所有属性覆盖到destination对象上,并且返回 destination 对象. 复制是按顺序的, 所以后面的对象属性会把前面的对象属性覆盖掉(如果有重复).

_.extend({name: 'moe'}, {age: 50});
=> {name: 'moe', age: 50}

取出来的数据用 extend 方法把新更新的数据合并再使用 findByIdAndUpdate 更新。

R
rankun203#2·11 年前
R
ravenwang#3·11 年前

封装一下,根据传入的更新对象动态生成带$set的update对象

参与回复
登录后即可参与回复。登录