mongoose 使用

官网:http://www.mongoosejs.net/docs/guide.html
一、初始化项目 npm init
二、安装 npm i mongoose ,推荐版本6 npm i mongoose@6.11.2

// 1、安装 mongoose
// 2、导入 mongoose
const mongoose = require('mongoose')

// 如果连接成功后出现 strictQuery 的警告,设置 strictQuery 为 true 即可,均无任何影响。
mongoose.set('strictQuery', true);

// 3、连接 mongodb 服务                      数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/mydata');


// 4、设置回调
// 设置连接成功的回调  官方推荐 once 事件回调函数只执行一次,on会自动重连。
mongoose.connection.once('open', () => {
    console.log('连接成功');
    // 5、创建文档的结构对象
    // 设置集合中文档的属性以及属性值的类型
    let BookSchema = new mongoose.Schema({
        name: String,
        author: String,
        price: Number
    })

    // 6、创建模型对象     对文档操作的封装对象
    let BookModel = mongoose.model('books', BookSchema);

    // 7、新增
    BookModel.create({
        name: '唐诗',
        author: '李白',
        price: 9.9
    }, (err, data) => {  //此处如果 mongoose 7版本,则用 then.(),但无法执行 mongoose.disconnect()方法,原因未解决;
        if (err) {
            console.log(err);
            return;
        }
        // 输出插入后的文档对象
        console.log(data)

        // 8、关闭数据库连接 (项目运行过程中,不会添加该代码)
        // mongoose.disconnect();
    })
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
    console.log('连接失败');
});

// 关闭数据库连接 (项目运行过程中,不会添加该代码)
mongoose.connection.on('close', () => {
    console.log('连接关闭');
});


运行命令:node .\01_链接数据库.js

以下简单介绍使用(数据类型、规则校验、删除、读取、条件设置、个性化读取):

// 1、安装 mongoose
// 2、导入 mongoose
const mongoose = require('mongoose')

// 如果连接成功后出现 strictQuery 的警告,设置 strictQuery 为 true 即可,均无任何影响。
mongoose.set('strictQuery', true);

// 3、连接 mongodb 服务                      数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/mydata');


// 4、设置回调
// 设置连接成功的回调  官方推荐 once 事件回调函数只执行一次,on会自动重连。
mongoose.connection.once('open', () => {
    console.log('连接成功');
    // 5、创建文档的结构对象
    // 设置集合中文档的属性以及属性值的类型
    let BookSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true  //必填,不能为空
        },
        author: {
            type: String,
            default: '匿名', //默认值
        },
        style: {
            type: String,
            enum: ['城市', '农村'] //枚举值
        },
        userName: {
            type: String,
            unique: true, //设置唯一值(重建集合才生效!)
        },
        price: Number
    })

    // 6、创建模型对象     对文档操作的封装对象   mongoose 会使用集合名称的复数,创建集合(如:book将成为books)
    let BookModel = mongoose.model('book', BookSchema);

    // 7、新增
    // BookModel.create({
    //     name: '王者荣耀',
    //     // author: '李白',
    //     style: '城市',
    //     userName: '西游记',
    //     price: 130
    // }, (err, data) => {  //此处如果 mongoose 7版本,则用 then.(),但无法执行 mongoose.disconnect()方法,原因未解决;
    //     if (err) {
    //         console.log(err);
    //         return;
    //     }
    //     // 输出插入后的文档对象
    //     console.log(data)

    //     // 8、关闭数据库连接 (项目运行过程中,不会添加该代码)
    //     // mongoose.disconnect();
    // })

    // 7、删除一条
    // BookModel.deleteOne({userName:'西游记222'},(err,data) => {
    //     if(err){
    //         console.log('删除失败··')
    //         return;
    //     }
    //     console.log(data)
    // })

    // 7、批量删除
    // BookModel.deleteMany({userName:'西游记'},(err,data) => {
    //     if(err){
    //         console.log('删除失败··')
    //         return;
    //     }
    //     console.log(data)
    // })

    // 7、更新文档  更新一条
    // BookModel.updateOne({userName:'西游记'},{userName:'西游记阿啦啦啦啦'}, (err, data) => {
    //     if (err) {
    //         console.log('更新失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    //   更新文档  批量
    // BookModel.updateMany({userName:'西游记'},{userName:'西游记阿啦啦啦啦'}, (err, data) => {
    //     if (err) {
    //         console.log('更新失败··')
    //         return;
    //     }
    //     console.log(data)
    // })

    // 7、读取单条
    // BookModel.findOne({author:'李白'}, (err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 批量读取
    // BookModel.find({author:'李白'}, (err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 读取所有
    // BookModel.find((err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })

    // 7、条件设置
    // 价格小于 20 的
    // BookModel.find({ price: { $lt: 10 } }, (err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 或者 条件
    // BookModel.find({ $or: [{ name: '王者荣耀' },{ name: '穿越火线' }  ]}, (err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 或者 且
    // BookModel.find({ $and: [{ name: '王者荣耀' }, { price: { $lt: 150 } }] }, (err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })

    // 7、正则匹配
    // BookModel.find({ name: /王/ }, (err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 不确定关键字,可能放在变量中,用new RegExp才能解析
    // BookModel.find({ name: new RegExp('王') }, (err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })

    // 7、个性化读取
    // 设置字段(只读取 name 和 author)
    // BookModel.find().select({ name: 1, author: 1 }).exec((err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 数据排序  小到大
    // BookModel.find().select({ name: 1, author: 1, price: 1 }).sort({ price: 1 }).exec((err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 数据排序  大到小 的 前三条数据
    // BookModel.find().select({ name: 1, author: 1, price: 1 }).sort({ price: -1 }).limit(3).exec((err, data) => {
    //     if (err) {
    //         console.log('读取失败··')
    //         return;
    //     }
    //     console.log(data)
    // })
    // 数据排序  大到小 的数据截取
    BookModel.find().select({ name: 1, author: 1, price: 1 }).sort({ price: -1 }).skip(1).limit(3).exec((err, data) => {
        if (err) {
            console.log('读取失败··')
            return;
        }
        console.log(data)
    })
});
// 设置连接错误的回调
mongoose.connection.on('error', () => {
    console.log('连接失败');
});

// 关闭数据库连接 (项目运行过程中,不会添加该代码)
mongoose.connection.on('close', () => {
    console.log('连接关闭');
});

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值