当前位置:Gxlcms > 数据库问题 > MongoDB快速入门教程 (4.4)

MongoDB快速入门教程 (4.4)

时间:2021-07-01 10:21:17 帮助过:4人阅读

4.5.Mongoose索引和方法

4.5.1.设置索引

  1. <code>let UserSchema = mongoose.Schema({
  2. sn: {
  3. type: Number,
  4. // 设置唯一索引
  5. unique: true
  6. },
  7. name: {
  8. type: String,
  9. // 设置普通索引
  10. index: true
  11. },
  12. age: Number,
  13. status: Number,
  14. gender: {
  15. type: String,
  16. trim: true,
  17. default: '男'
  18. },
  19. pic: {
  20. type: String,
  21. set (params) {
  22. if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
  23. return "http://"+params
  24. }
  25. return params
  26. }
  27. }
  28. })</code>

注意:如果控制台出现下面的警告

技术图片

解决方案:

在连接数据库的时候加上配置项

  1. <code>mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1:27017/test', {
  2. useNewUrlParser: true,
  3. // 使用createIndexes来创建索引
  4. useCreateIndex: true
  5. }, (err) => {
  6. if (err) {
  7. console.log(err)
  8. return
  9. }
  10. console.log('数据库连接成功')
  11. })</code>

4.5.2.内置方法

文档地址:https://mongoosejs.com/docs/queries.html

这些内置的方法我们其实已经在前面增删查改中使用过一些,这里不再举例

4.5.3.扩展静态方法

静态方法的特点是不需要实例化就可以直接调用的

1.在Schema上定义方法

  1. <code>let mongoose = require('./db')
  2. // 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema
  3. let UserSchema = mongoose.Schema({
  4. sn: {
  5. type: Number,
  6. // 设置唯一索引
  7. unique: true,
  8. index: true
  9. },
  10. name: {
  11. type: String,
  12. // 设置普通索引
  13. index: true
  14. },
  15. age: Number,
  16. status: Number,
  17. gender: {
  18. type: String,
  19. trim: true,
  20. default: '男'
  21. },
  22. pic: {
  23. type: String,
  24. set (params) {
  25. if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
  26. return "http://"+params
  27. }
  28. return params
  29. }
  30. }
  31. })
  32. UserSchema.statics.findBySn = function(sn, cb){
  33. this.find({"sn": sn}, (err, result) => {
  34. cb(err, result)
  35. })
  36. }
  37. // 4.创建模型
  38. let User = mongoose.model('User', UserSchema)
  39. module.exports = User</code>

2.调用方法

  1. <code>let UserModel = require('./model/users')
  2. UserModel.findBySn("1001", (err, result) => {
  3. console.log(result)
  4. })</code>

4.6.Mongoose数据校验

做数据校验的目的就是保证添加到数据库中的数据的合法性

4.6.1.内置校验参数

以下是用于数据校验的各种参数
技术图片

举个例子:

  1. <code>let UserSchema = mongoose.Schema({
  2. sn: {
  3. type: Number,
  4. max: 1002
  5. },
  6. name: {
  7. type: String,
  8. },
  9. age: Number,
  10. status: Number,
  11. gender: {
  12. type: String,
  13. trim: true,
  14. required: true
  15. },
  16. pic: {
  17. type: String,
  18. set (params) {
  19. if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
  20. return "http://"+params
  21. }
  22. return params
  23. }
  24. }
  25. })</code>

增加数据:

  1. <code>let UserModel = require('./model/users')
  2. // 增加数据
  3. let UserObj = new UserModel({
  4. sn: 1001,
  5. name: 'nodeing',
  6. age: 28,
  7. status: 0,
  8. pic: "www.baidu.com"
  9. })
  10. UserObj.save()</code>

注意:上面增加数据的时候,gender没有传,但是定义Schema的时候,又加了required参数,那么就会报下面的错误

技术图片

从上面的例子我们可以看出,这些校验参数的作用实际上就是在规定数据的合法性的,不符合的数据不能存入数据库

4.6.2.自定义验证器

自定义验证器是通过配置validate参数实现的,请注意看下面代码中的sn

  1. <code>let mongoose = require('./db')
  2. // 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema
  3. let UserSchema = mongoose.Schema({
  4. sn: {
  5. type: String,
  6. validate: (sn) => {
  7. // 返回true表示验证通过 返回false表示验证失败
  8. return sn.length > 5
  9. }
  10. },
  11. name: {
  12. type: String,
  13. },
  14. age: Number,
  15. status: Number,
  16. gender: {
  17. type: String,
  18. trim: true,
  19. required: true
  20. },
  21. pic: {
  22. type: String,
  23. set (params) {
  24. if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
  25. return "http://"+params
  26. }
  27. return params
  28. }
  29. }
  30. })
  31. // 4.创建模型
  32. let User = mongoose.model('User', UserSchema)
  33. module.exports = User</code>

增加数据如下:

  1. <code>let UserModel = require('./model/users')
  2. // 增加数据
  3. let UserObj = new UserModel({
  4. sn: "1001",
  5. name: 'nodeing',
  6. age: 28,
  7. status: 0,
  8. gender: '男',
  9. pic: "www.baidu.com"
  10. })
  11. UserObj.save()</code>

注意:由于自定义验证器需要sn的长度大于5,增加的数据中sn只有4位,因此,会报如下错误:
技术图片

螺钉课堂视频课程地址:http://edu.nodeing.com

MongoDB快速入门教程 (4.4)

标签:控制台   连接数   creat   ati   ida   dex   test   use   http   

人气教程排行