如何使用Mongodb / Mongoose中的子文档处理深度更新?

瓦迪姆·谢维佐夫(Vadim Shvetsov)

我想在这种情况下使用猫鼬。假设我们有一个这样的模式:

const userSchema = new Schema({
  name: {
    first: { type: String, required: true },
    last: { type: String, required: true },
  },
  email: { type: String, required: true, unique: true, lowercase: true },
});

假设我们已经有了带有名字和姓氏的文档。我只需要使用以下args对象更新名字和电子邮件:

const updateUser = {
  name: {
    first: Eddy,
  },
  email: '[email protected]'
};

如果在大多数情况下将其与猫鼬更新方法一起使用,则还将姓氏更改为null这是因为JavaScript不支持深度对象合并等。那么获得正确合并对象可能性的最佳方法是什么?

我在下面找到了实现此目标的方法,但它似乎并不是最佳解决方案:

User.findById(args.id, (error, user) => {
  if (error) throw err;
  user.name.first = args.name.first ? args.name.first : user.name.first;
  user.name.last = args.name.last ? args.name.last : user.name.last;
  user.email = args.email ? args.email : user.email;
  user.save((err, updatedUser) => {
    if (err) throw err;
    return updatedUser;
  });
});

我和Eslint不喜欢这种重新分配和无法维护的代码。有更好的主意吗?我不确定是否仅需要为此功能使用lodash和其他库。

瓦迪姆·谢维佐夫(Vadim Shvetsov)

这是我针对此问题所做的工作。

感谢Neil Lunn这个想法

我们需要将所有对象键映射到dot.notation并传递给$ set。

这是具有此功能要点如果需要两层嵌套,则可以添加另一个条件和映射。

无论如何,我希望Mongoose API能够解决我们与嵌套对象进行深度合并的问题,但就目前而言,我认为Neil的解决方案是最好的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 Mongoose 更新 MongoDB 中的文档

更新子文档中的数组-mongoose mongodb

使用Mongoose更新数组中的子文档

在 MongoDB 中更新 Mongoose 子文档时使用 POST 还是 PUT 有关系吗?

如何在mongodb中更新子文档

如何使用 mongoose 更新 MongoDB 中的数组?

如何使用MongoDB中文档中的字段更新子文档数组中的字段?

如何使用子文档数组更新MongoDB文档

如何使用 mongoose 在单个 mongodb 文档中更新数组中的多个对象

使用猫鼬更新深度嵌套的子文档

如何使用C#驱动程序更新MongoDB中数组子文档中包含的数组子文档中的字段?

在Mongoose / MongoDB中的子文档,数组,文档中过滤数组

在Mongodb中深度嵌套的文档中更新字段

使用 findOne() 后如何从 mongoose/mongodb 文档中获取值

使用mongoose从Mongo中删除子文档

如何使用C#驱动程序更新MongoDB数组中的子文档

如何使用Sails.js和Waterline更新MongoDB子文档中的特定密钥?

如何在Mongoose中更新/上传文档?

如何在MongoDB中更新子文档字段值?

MongoDB:使用索引更新数组中的子文档

使用节点在mongodb中更新子文档

MongoDB Mongoose按日期范围查询深度嵌套的子文档数组

我们如何使用MongoDB Java驱动程序在MongoDB中追加/更新集合的子文档?

更新MongoDB中的子文档数组

MongoDB更新数组中的错误子文档

如何使用MongoDB过滤子文档中的数组

如何在Java中使用ObjectID更新MongoDB中的文档

如何使用Spring Data Java在MongoDB中更新嵌套文档

如何使用Java在MongoDB中执行文档的批量更新