【发布时间】:2016-04-24 14:22:22
【问题描述】:
我是 nodejs 的新手。 我有一个带有猫鼬和用户登录的应用程序。 mongoDB 中的一些集合适用于所有用户,还有一些像 e.g. customer-collection 是单独的,因此所有用户都有自己的客户集合。 当用户登录并获得他的 jwt-token 时,各个 mongoose 模型将被实例化:
var models = require('../models')(userID);
在文件夹 /models 中有一个 index.js:
var Customer = require('./customermodel');
module.exports = function (userID) {
Customer(userID)
}
文件/models/customermodel.js:
var mongooseCustomer = function(userID) {
var schema = mongoose.Schema({
_id: { type: Number},
Name: { type: String },
Address: { type: String },
}, {collection: userID + 'userID'})
return mongoose.model(userID + 'customer', schema);
}
Module.exports = mongooseCustomer;
当客户从两个不同的浏览器登录并返回错误时会出现问题:
编译后无法覆盖123customer 模型。
我通过改变解决了这个问题:
var models = require('../models')(userID);
到:
try {
var models = require('../models')(userID);
console.log('Schema was created');
}
catch (err) {
console.log('User is already logged in');
}
现在我的问题是,如果整个设置过于复杂,是否有更简洁的方法来处理以动态方式创建模型?
【问题讨论】:
-
为每个用户创建单独的集合背后的基本原理是什么?如果您使用 SQL 数据库,这类似于为每个用户创建一个新表,这听起来不是一个好主意。
-
我习惯使用 .net 和 mySql,我曾经将所有客户行放在一个表中,但有时查询会因表的连接而变得复杂,我一直很担心在特定情况下,查询中的错误可能会向用户显示错误的客户。因此,我正在考虑制作单独系列的想法。无论如何,使用 mongoDB 不会有像 mySQL 那样的连接,并且查询不会太长和太复杂。
-
@saintedlama 在他们的回答中提出的设置是我自己熟悉的设置,并且效果很好。如果您正确设置查询,并且最好让 QA 人员来测试您的系统,那么在同一个集合中拥有属于不同用户的数据是完全可以的。
标签: node.js express mongoose mongoose-schema