如何做到 findByIdAndUpdate 仅更新不为空的字段?
Happy sunshine.
如果要根据传入的参数来更新目标文档的部分数据要怎么做呢?
例如我传入了 creator, 就只更新 creator. 而不是将 update 对象内容全部更新. 同理, 传入 name 就只更新 name.
现在 MongoDB 的 $set 似乎还是得一次性指定所有要更新的参数, 而不能根据传入的值是否为空来确定是否要更新.
类似于 MyBatis 里面的 UpdateSchemaSelective()
谢谢~
如果我这样的想法本身有问题, 请指正, 谢谢~
5 回复
封装一下,根据传入的更新对象动态生成带$set的update对象
@ravenwang 不用封装用个最简单的方法 使用underscorejs 中的extend方法
extend_.extend(destination, *sources)
复制source对象中的所有属性覆盖到destination对象上,并且返回 destination 对象. 复制是按顺序的, 所以后面的对象属性会把前面的对象属性覆盖掉(如果有重复).
_.extend({name: 'moe'}, {age: 50});
=> {name: 'moe', age: 50}
取出来的数据用 extend 方法把新更新的数据合并再使用 findByIdAndUpdate
更新。
@jaywcjlove 好办法,不过要考虑是用extend还是merge
@ravenwang underscorejs 方法很多哦,提供接口也很多。