针对不同的合并项目使用不同的 MongoDB 集合

问题描述 投票:0回答:1

我有 2 个 NodeJs 项目,最近将它们合并到一个 NodeJs 服务器中,同时将两个项目的控制器、服务和 mongoDB 模型保留在单独的文件夹中。问题是,将两个单独的 NodeJs 服务器的路由合并为一个后,两者在数据库中都有自己单独的集合,但我无法为不同的路由切换到不同的集合。我想让一个项目文件夹中的评级对象调用与另一个项目文件夹中的评级不同的数据库集合。我调用数据库助手进行连接,但不能使用 mongoose.connect 两次。

我在评论连接部分时尝试了

mongoose.connection.useDb('squareCollection');
,但没有成功。如果我尝试将两个项目上的 mongoose.connection() 替换为 mongoose.createConnection() ,我会收到错误:
Operation squareusers.findOne() buffering timed out after 10000ms

我如何重构我的代码来为两个不同的路由和服务器运行不同的连接,因为我将一台服务器的路由移动到另一台服务器,并且它们只是与同一服务器上的路由分开。

我的 db.js 文件是:

const config = require('config');
const mongoose = require('mongoose');
mongoose.connect(process.env.MONGODB_URI || config.get('connectionString'), {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true}).then(()=>{})
    .catch(e=>console.log(e));

mongoose.Promise = global.Promise;

module.exports = {
    SquareRating: require('../users/rating.model'),
    Image: require('../images/images.model'),
    ... //more models
};

两个项目中我的 MongoDb 模型的结构如下:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const schema = new Schema({
    rating: { type: Number, unique: false, required: true },
    orgUuid: { type: String, required: true },
    note: { type: String, unique: false, required: false},
});

schema.set('toJSON', { virtuals: true });

module.exports = mongoose.model('SquareRating', schema);

我将具有 mongoDB 连接的服务中的模型称为:

const db = require('../_helpers/db');
const Rating = db.Rating;
return  Rating.find({id: id});

两个不同后端的路由在 server.js 中如下:

app.use('/api/square/users', require('./project1-server-backend/users/users.controller'));
app.use('/api/users', require('./project2-server-backend/users/users.controller'));
node.js mongodb express mongoose collections
1个回答
0
投票

要创建多个集合,您需要使用

createConnection
。请参考 - https://mongoosejs.com/docs/connections.html#multiple_connections

您的用例的示例代码 -

const mongoose = require('mongoose');

const conn1 = mongoose.createConnection(process.env.URI1);
const conn2 = mongoose.createConnection(process.env.URI2);

conn1.model('SquareRating', require('path to SquareRating schema for connection 1'));
conn1.model('OtherModelOnConn1', require('path to another schema for connection 1'));

conn2.model('Image', require('path to Image schema for connection 2'));
conn1.model('OtherModelOnConn2', require('path to another schema for connection 2'));



module.exports = {
    conn1,
    conn2
};

根据需求导入conn1、conn2。模型应在正确的连接上注册才能获得正确的结果。

© www.soinside.com 2019 - 2024. All rights reserved.