首页 > 解决方案 > Mongoose createConnection 和 Document.prototype.save()

问题描述

我正在同一个 mongo 主机上构建一个只有几个连接(最多 3 或 4 个)的多租户应用程序。我真正做的是在服务器启动时建立猫鼬连接并将其存储在上下文对象中。

// For each tenants
tenantConnection(name, uri) => new Promise((resolve, reject) => {
    const connection = mongoose.createConnection(uri, {
      useCreateIndex: true,
      useNewUrlParser: true,
      useFindAndModify: false,
      retryWrites: false,
      useUnifiedTopology: true
    })
    connection.on('connected', async () => {
      const MessageModel = connection.model('Message', Message) // <- Message is a classic mongoose Schema
      ...
      return resolve({ connection, models: { Message: MessageModel } })
    })
  })

一切正常,除了当我尝试使用原型时.save()(与 相同Model.create({...})。当我尝试创建新记录时,函数卡住,没有触发回调,也没有任何错误。

const { models: { Message } } = tenant
const messageRecord = new Message({ content }
await messageRecord.save() // -> Stuck here, nothing happens

目前,我发现的唯一方法是使用UpdateOne({}, {...}, {upsert: true})创建记录,但我更愿意使用原生 mongoose 原型.save()从我的模式中触发设置器。

有谁知道我做错了什么?

标签: javascriptnode.jsmongodbexpressmongoose

解决方案


推荐阅读