美文网首页
Node操作mongodb

Node操作mongodb

作者: rocky_tt | 来源:发表于2020-11-23 17:33 被阅读0次

    一、下载Node的数据库三方包(mongoose)

    npm install mongoose

    //引入三方包
    const mongoose = require('mongoose')
    //连接数据库
    mongoose.connect('mongodb://localhost/day01', { useNewUrlParser: true, useUnifiedTopology: true })
        .then(() => console.log('数据库连接成功'))
        .catch(err => console.log(err, '数据库连接失败'))
    
    // 创建集合规则
    const courseSchema = new mongoose.Schema({
        name: String,
        author: String,
        isPublished: Boolean
    });
    // 使用规则创建集合
    // 1.集合名称
    // 2.集合规则
    const Course = mongoose.model('Course', courseSchema) // courses
    //第一种方式
    // 创建文档
    const course = new Course({
        name: 'node.js基础',
        author: '张三',
        isPublished: true
    });
    // 将文档插入到数据库中
    course.save();
    //第二种方式
    Course.create({name: 'Javascript123', author: '黑马讲师', isPublished: false})
          .then(result => {
            console.log(result)
          })
    

    二、查询

    // 创建集合规则
    const userSchema = new mongoose.Schema({
        name: String,
        age: Number,
        email: String,
        password: String,
        hobbies: [String]
    });
    
    // 使用规则创建集合
    const User = mongoose.model('User', userSchema);
    
    // 查询用户集合中的所有文档
    // User.find().then(result => console.log(result));
    // 通过_id字段查找文档
    // User.find({_id: '5c09f267aeb04b22f8460968'}).then(result => console.log(result))
    
    // findOne方法返回一条文档 默认返回当前集合中的第一条文档
    User.findOne({name: '李四'}).then(result => console.log(result))
    // 查询用户集合中年龄字段大于20并且小于40的文档
    User.find({age: {$gt: 20, $lt: 40}}).then(result => console.log(result))
    // 查询用户集合中hobbies字段值包含足球的文档
    User.find({hobbies: {$in: ['足球']}}).then(result => console.log(result))
    // 选择要查询的字段
    User.find().select('name email -_id').then(result => console.log(result))
    // 根据年龄字段进行升序排列
    User.find().sort('age').then(result => console.log(result))
    // 根据年龄字段进行降序排列
    User.find().sort('-age').then(result => console.log(result))
    // 查询文档跳过前两条结果 限制显示3条结果
    User.find().skip(2).limit(3).then(result => console.log(result))
    

    三、删除

    // 创建集合规则
    const userSchema = new mongoose.Schema({
        name: String,
        age: Number,
        email: String,
        password: String,
        hobbies: [String]
    });
    
    // 使用规则创建集合
    const User = mongoose.model('User', userSchema);
    
    // 查找到一条文档并且删除
    // 返回删除的文档
    // 如何查询条件匹配了多个文档 那么将会删除第一个匹配的文档
    User.findOneAndDelete({_id: '5c09f267aeb04b22f8460968'}).then(result => console.log(result))
    // 删除多条文档
    User.deleteMany({}).then(result => console.log(result))
    

    四、修改

    // 创建集合规则
    const userSchema = new mongoose.Schema({
        name: String,
        age: Number,
        email: String,
        password: String,
        hobbies: [String]
    });
    
    // 使用规则创建集合
    const User = mongoose.model('User', userSchema);
    // 找到要删除的文档并且删除
    // 返回是否删除成功的对象
    // 如果匹配了多条文档, 只会删除匹配成功的第一条文档
    User.updateOne({name: '李四'}, {age: 120, name: '李狗蛋'}).then(result => console.log(result))
    // 找到要删除的文档并且删除
    User.updateMany({}, {age: 300}).then(result => console.log(result))
    

    五、校验字段

    const postSchema = new mongoose.Schema({
        title: {
            type: String,
            // 必选字段
            required: [true, '请传入文章标题'],
            // 字符串的最小长度
            minlength: [2, '文章长度不能小于2'],
            // 字符串的最大长度
            maxlength: [5, '文章长度最大不能超过5'],
            // 去除字符串两边的空格
            trim: true
        },
        age: {
            type: Number,
            // 数字的最小范围
            min: 18,
            // 数字的最大范围
            max: 100
        },
        publishDate: {
            type: Date,
            // 默认值
            default: Date.now
        },
        category: {
            type: String,
            // 枚举 列举出当前字段可以拥有的值
            enum: {
                values: ['html', 'css', 'javascript', 'node.js'],
                message: '分类名称要在一定的范围内才可以'
            }
        },
        author: {
            type: String,
            validate: {
                validator: v => {
                    // 返回布尔值
                    // true 验证成功
                    // false 验证失败
                    // v 要验证的值
                    return v && v.length > 4
                },
                // 自定义错误信息
                message: '传入的值不符合验证规则'
            }
        }
    });
    
    const Post = mongoose.model('Post', postSchema);
    
    Post.create({title:'aa', age: 60, category: 'java', author: 'bd'})
        .then(result => console.log(result))
        .catch(error => {
            // 获取错误信息对象
            const err = error.errors;
            // 循环错误信息对象
            for (var attr in err) {
                // 将错误信息打印到控制台中
                console.log(err[attr]['message']);
            }
        })
    

    六、连表查询

    // 用户集合规则
    const userSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true
        }
    });
    // 文章集合规则
    const postSchema = new mongoose.Schema({
        title: {
            type: String
        },
        author: {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'User'
        }
    });
    // 用户集合
    const User = mongoose.model('User', userSchema);
    // 文章集合
    const Post = mongoose.model('Post', postSchema);
    
    // 创建用户
    User.create({name: 'itheima'}).then(result => console.log(result));
    // 创建文章
    Post.create({titile: '123', author: '5c0caae2c4e4081c28439791'}).then(result => console.log(result));
    Post.find().populate('author').then(result => console.log(result))
    

    相关文章

      网友评论

          本文标题:Node操作mongodb

          本文链接:https://www.haomeiwen.com/subject/kkeviktx.html