首页 > 解决方案 > 如何用 mongoose 完全替换 mongo 文档中的模式

问题描述

由于我不会进入的原因,我们需要能够更改文档所基于的架构,即 mongo 中存在的文档。

这是我遇到的问题。

我有两个模式,我们称它们为 SchemaOne 和 SchemaTwo 定义为:

const schemaOne = new mongoose.Schema({
  FirstName: { type: String, required: true },
  LastName: { type: String, required: true },  
},
{ optimisticConcurrency: true, versionKey: 'versionKey'})

const schemaTwo = new mongoose.Schema({
  BusinessName: { type: String, required: true },
  BusinessId: { type: String, required: true }
},
{ optimisticConcurrency: true, versionKey: 'versionKey'})

基于 SchemaOne 的 mongodb 中已经存在一个文档。我需要能够用基于模式二的数据替换 mongo db 中存在的内容,因此不仅要替换字段数据,还要替换整个模式。所以如果我当前的数据是

{
  "_id": "12345",
  "FirstName": "John",
  "LastName": "Doe",
}

新数据应变为:

{
  "_id": "12345",
  "BusinessName": "John Doe Plumbing",
  "BusinessId": "PB1234"
}

注意相同的_Id,这不是新记录。我正在使用 document.save() 函数,因为我正在使用 mongoose 内置的并发功能。

关于我如何能够做到这一点的任何想法?

我尝试过 document.overwrite() 但由于该文档基于 SchemaOne,因此保存时出现错误。请记住,我需要使用 save() 而不是 Model statics,因为 Mongoose 并发逻辑不适用于那些无需使用中间件(只有一半工作)的情况。

欢迎任何提示

标签: mongodbmongoosemongoose-schema

解决方案


推荐阅读