如何做到 findByIdAndUpdate 仅更新不为空的字段?
发布于 10 年前 作者 rankun203 5806 次预览 最后一次回复是 10 年前 来自 问答
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 方法把新更新的数据合并再使用
findByIdAndUpdate更新。@jaywcjlove 好办法,不过要考虑是用extend还是merge
@ravenwang underscorejs 方法很多哦,提供接口也很多。
@ravenwang @jaywcjlove 谢谢