【发布时间】:2022-01-13 08:08:03
【问题描述】:
我正在使用 Node.js 构建一个费用跟踪应用程序,其中所有收入和成本都应该保存在数据库中。
我的想法是为每个注册用户创建一个新集合,并将他们所有的收入/成本操作保存在该集合中。
在写之前我想考虑的事情是:
- 如何命名集合
- 这种方法的效率
- 它是否安全
- 当他们从其他设备登录时,我如何保存他们的数据
- 两个用户是否可以拥有相同的集合名称,从而导致他们将操作保存在一个集合中
- 有没有更好的方法来做到这一点
我想解决这个问题的方法是制作一个模型,该模型采用给定的公司/用户名来创建一个集合。
const mongoose = require('mongoose');
const bcrypt = require ('bcrypt');
const Schema = mongoose.Schema;
const UserSchema = new Schema({
userName: {
type: String,
required: true,
unique: true
},
userPass: {
type: String,
required: true
},
userEmail: {
type: String,
required: true,
unique: true
}
}, { timestamps: true });
UserSchema.pre('save', async function (next) {
try {
const hashed = await bcrypt.hash(this.userPass, 10)
console.log('saved user with hashed password.')
this.userPass = hashed
next();
} catch {
next(error)
}
})
const User = mongoose.model(userName, UserSchema);
module.exports = User;
只有拥有该唯一名称密码的人才能访问该集合。
所以我想问的是:有没有更好的方法来做到这一点?
【问题讨论】:
-
1.集合是多个文档的集合,您的意思是您要为每个用户创建一个文档,存储在
User集合中。 2.unique约束使得不可能有两个相同的名字。当您尝试保存重复名称时请注意,mongo 将通过您重复错误而不保存它。 3.您所做的很好,为引用用户的费用创建一个集合,为用户创建一个集合(就像您已经拥有的那样),或者您将费用作为嵌套集合存储在用户内部,反之亦然;)跨度> -
所以你说我应该做两个系列。一种用于用户,另一种用于费用,其中每个文档都引用了用户。嗯,这比我想的要容易得多,非常感谢。 :)
-
没错,然后当您想要一个用户的所有费用时,您可以进行 mongodb 调用,例如 Expenses.find({personThatMadeTheExpense: userId})
标签: javascript node.js database mongodb mongoose