gpt4 book ai didi

node.js - 序列化然后反序列化 mongoose.Model 实例

转载 作者:太空宇宙 更新时间:2023-11-04 02:33:23 25 4
gpt4 key购买 nike

这是我的问题:

  • 我的系统有两台主机:机器 M1 和机器 M2,每个主机在同一代码库上运行一个 node.js 进程。
  • 在 M1 上,我有一个 mongoose.Model 实例(用户),我需要将其传递(使用 REST api 调用)到 M2。我必须在 M2 上拥有完整的用户实例,即。所有数据、虚拟、插件、save() 都应该按预期工作。
  • 一种解决方案是仅发送用户的 ObjectId,然后在 M2 上对 mongodb 执行查询以获取完整对象。我不想这样做!
  • 另一种解决方案是使用 user.toJSON()user.toObject() 对其进行序列化,然后通过网络发送。在 M2 上,我所做的就是new User(userObject)
  • 问题是,当对此调用 .save() 时,它会将其解释为新对象并尝试 insert() 而不是 .update()
  • 要解决此问题,我可以在对象上设置 .isNew = false,但是,在更新时,增量(存储模型和更新值之间的差异)现在包含所有数据,并且 mongo 提示它不会更新文档的 _id

有没有一种优雅的方法可以使用 native 方法或插件来解决这个问题?我做错了吗?!

最佳答案

这可能是错误的,但您可以尝试在创建的用户对象上使用 upsert() 而不是保存它。

如果您打算经常使用它,您最终可能会在架构中定义一个新的静态方法,例如:

Schema.statics.createOrUpdate = function(object, callback) {
statics.upsert(this, object, callback);
};

这样您就可以将您的用户数据传递到 M2,并在 M2 上轻松更新。

关于node.js - 序列化然后反序列化 mongoose.Model 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24671575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com