猫鼬vs MongoDB验证

时间:2018-10-03 00:04:15

标签: node.js mongodb mongoose mean-stack mean

我有一个正在从事的项目,并且正在遵循用户创建指南。目的是创建一个具有唯一用户名,唯一电子邮件和bcrypt密码的用户。一旦使用了其他用户名,则其他任何用户都不能使用用户名或电子邮件进行注册。

此过程涉及通过邮递员使用以下模式通过邮寄请求通过以下架构创建用户。在已经创建用户之后,添加了“唯一”指示符。在更新架构以包括“唯一”选项之后,我发现仍然可以使用同一封电子邮件创建用户。在此处搜索时,我发现这是由于使用该电子邮件创建了初始文档,并且通过删除该集合并重新开始进行解决,这不是一个大问题。

var UserSchema = new Schema({
username: { type: String, lowercase: true, required: true, unique: 
true},
password: { type: String, required: true },
email: { type: String, required: true, lowercase: true, unique: true}
});

但是,在研究Mongoose网站时,我发现了一些有关验证的信息,这让我有些困惑。我查看了validation文档,然后查看了Mongoose网站上的FAQ,据我所知,我应该在生产中使用MongoDB shell create the indexes来存储我的数据,如果我希望它们在创建时被确认为唯一,而不是使用“唯一”选项。

这是正确的吗?或者,当Mongoose告诉我最终实际上我将需要使用MongoDB Shell时,为什么在Mongoose中使用“唯一”?今天,在开发MEAN应用程序时,使用Schema validation available in MongoDB还是Mongoose仍然是首选的选择吗?我确实看到Mongoose经常使用,但是我没有任何意见或需要使它们之间的联系尽可能紧密,仅使用MongoDB本身,Mongoose仍然值得学习吗?如果我做错了,那太好了,我可以接受,但是任何见识都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

您可以使用MongoDB Native Driver for Node.js代替猫鼬。我发现使用Mongoose可以使Schema更加容易并且更具关系。在这种情况下,并没有错,但是猫鼬在性能上有一些缺点,如下所示: Performance

您还可以将Mongoose与mongoose-unique-validator软件包一起使用来处理unique验证。 Link for the package

const mongoose = require('mongoose');
const uniqueValidator = require('mongoose-unique-validator');

var UserSchema = mongoose.Schema({
  username: { type: String, lowercase: true, required: true, unique: true},
  password: { type: String, required: true },
  email: { type: String, required: true, lowercase: true, unique: true}
});

userSchema.plugin(uniqueValidator);