我想要的是拥有具有相同集合(相同模式、精确模型、不同数据)的任意数据库(例如 50 个)和 1 个 NodeJS(expressjs + mongoose)Web 应用程序。
简化案例示例:
我有:
- 具有
User
模型的单个 Web 应用程序(expressjs + mongoose)。 - 50 个域、50 个数据库以及
用户
集合。
我想要实现什么行为:
GET/api/users/
http 请求传入域之一 (test-domain-39.myapp.com)- 应用程序获取请求的域名(test-domain-39),并且当我在
users.controller
中执行User.find({isActive: true})
时, Mongoose 以某种方式理解它想要查询database-39
所以我只想要一个抽象。我将数据库名称传递给 mongoose 并继续使用 User
模型(就像我们在拥有单个数据库连接时通常所做的那样),并且 mongoose 如果需要,会创建连接(如果这是对特定数据库的第一个请求),并使其在连接池中的下一个请求等中保持事件状态。
实现这一目标最简单、最有效的方法是什么?
提前致谢!
最佳答案
恕我直言,虽然 MongoDB 可以做到这一点,但我不建议为每个域维护一个单独的数据库,特别是如果您预计拥有大量数据库。您是否考虑过采用 Multi-Tenancy 模型?
下面的示例代码将用户“Alex”添加到两个不同的数据库“domainOne”和“domainTwo”中。希望这有帮助
var mongoose = require('mongoose');
var personSchema = { name: String, domain : String };
var baseUri = 'mongodb://localhost/';
domains.forEach((domain) => {
var conn = mongoose.createConnection(baseUri + domain, (error) => {
if(error){
console.log('Ups! Database connection failed!');
return;
}
//Use the connection object to create your models,
//instead the mongoose object
//so that our data is saved into the database
//associated with this connection
var Person = conn.model('Person', personSchema);
//Lets add user 'Alex' into the database
(new Person({name : 'Alex', domain : domain })).save((error) => {
if(error){
console.log('Ups! Could not save person');
} else {
conn.close();
}
});
});
});
关于node.js - Mongoose:使用一个模型时处理多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45674964/