我正在做一个包含子项目的Node.js项目.一个子项目将有一个Mongodb数据库,Mongoose将用于包装和查询db.但问题是
要使用多个mongoose实例,Node.js不允许多个模块实例,因为它具有缓存系统require().我知道在Node.js中禁用模块缓存,但我认为这不是一个好的解决方案,因为它只需要mongoose.
我曾尝试使用createConnection()和openSet()猫鼬,但它不是解决方案.
我试图深度复制mongoose实例(http://blog.imaginea.com/deep-copy-in-javascript/)以将新的mongoose实例传递给子项目,但它会抛出RangeError: Maximum call stack size exceeded.
我想知道是否有使用多个数据库与mongoose或任何解决方法来解决这个问题?因为我认为猫鼬非常容易和快速.或任何其他模块作为建议?
我想了解如何在 mongoose 全局承诺连接中的数据库之间切换。
我当前的连接是这样建立的 app.ts
import * as mongoose from 'mongoose';
...
try {
await mongoose.createConnection(`mongodb://localhost:27017/db1`, {
useNewUrlParser: true,
})
console.log("Connected")
} catch (error) {
console.log(error)
}
Run Code Online (Sandbox Code Playgroud)
然后我在不同的文件中访问它 some.model.ts
import { Schema, Document, model } from 'mongoose';
const SomeSchema: Schema = new Schema({
name: { type: String, required: true },
owner: { type: string, required: true }
});
export default model('Some', SomeSchema);
Run Code Online (Sandbox Code Playgroud)
根据文档。
到目前为止,我们已经看到了如何使用 Mongoose 的默认连接连接到 MongoDB。有时我们可能需要向 Mongo 打开多个连接,每个连接都有不同的读/写设置,或者可能只是例如不同的数据库。在这些情况下,我们可以使用 mongoose.createConnection() 它接受已经讨论过的所有参数并为您返回一个新的连接。
const conn = mongoose.createConnection('mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]', options);
我可以像这样创建多个数据库连接
try {
const …Run Code Online (Sandbox Code Playgroud)