Nodejs操作Mongodb数据库

Nodejs操作Mongodb数据库

一、在nodejs中使用Mongodb

1.新建一个文件夹,进入文件夹

npm i  //初始化文件夹

2.安装操作mongodb的模块

npm install mongodb --save

3.引入mongodb

const MongoClient = require('mongodb').MongoClient;  

//定义数据库的连接地址(在控制台中输入mongo ,有一个connecting to:mongodb://localhost:27017。即为mongo数据库的连接地址 )
const url = "mongodb://localhost:27017";
//定义数据库名称
const dbName = "myproject";

//实例化MongoClient
const client = new Mongodb(url);

//连接数据库
client.connect(function(err) {
    if(err) {
        console.log(err);
        return;
    }
    console.log("连接成功");
    const db = client.db(dbName);
    
    
    //数据库操作
    //1查找数据
    db.collection("user").find().toArray((err, data) => {
        if(err) {
            console.log(err);
            return;
        }
        console.log(data);
        //操作完后关闭数据库
    	client.close();
    })
    
    //2.插入数据
    db.collection("user").insertOne({"name": "小王"},(err, data) => {
        if(err) {
            consol.log(err);
            return;
        }
        console.log("插入一条数据成功");
        console.log(data);
        
        //关闭数据库连接
        client.close();
    })
    
    //3.修改数据
	db.collection("user").updateOne({"name": "小王"}, {$set:{"age": 18}}, (err, data) => {
		if(err) {
            console.log(err);
            return;
        }
        console.log("将name为小王的数据的age改为18");
        
        //关闭数据库连接
        client.close();
    })
    
    //4.删除数据
    db.collection("user").deleteOne({"name": "小王"},(err, data) => {
        if(err) {
            console.log(err);
            return;
        }
        console.log("删除一条数据成功");
        client.close();
    })
    
    //5.删除多条数据
    db.collection("user").deleteMany({"name": "小王"}, (err, data) => {
        if(err) {
            console.log(err);
            return;
        }
        console.log("删除多条数据成功");
        client.close();
    })
    
})

另外一种连接数据库方法

MongoClient.connect(url, {useUnifiedTopology: true}, (err, client) => {
    if(err) {
        console.log(err)
        return;
    }
    let db = client.db(dbName);
    
    ...
})

二、mongoose

Mongoose的两个特点

1.通过关系型数据库的思想来设计非关系型数据库

2.基于mongodb驱动,简化操作

(一)基础使用

1.安装mongoose模块

npm install mongoose --save

2.引入mongoose并连接数据库

const mongoose = require('mongoose')

mongoose.connect("mongodb://localhost:27017/eggcms")  //eggcms为数据库名称
//如果有账号密码则
mongoose.connect("mongodb://eggadmin:123456@localhost:27017/eggcms")
 
//如果需要提醒数据库连接成功,可以在第三个参数传入回调函数 第二个参数可以不传,但是在mongo4以后会报警告
mongoose.connect("mongodb://eggadmin:123456@localhost:27017/eggcms", {useNewUrlParser: true}, (err) => {
    if(err) {
        console.log(err)
        return
    }
    console.log("数据库连接成功!")
})

3.操作users表(集合),定义一个Schema

//定义数据库中users表的结构,规定类型
//Schema里面的对象和数据库的中的字段需要一一对应
//数据库中的Schema,为数据库对象的集合。schema是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的每一个collection,它不具备操作数据库的能力
const UserSchema = mongoose.schema({
    name: String,
    age: Number,
    status: {
        type: Number,
        default: 1,  //指定status的默认参数为1,当增加数据时没传入status,则会默认把status的值设置为1	   
        //预定义模式修饰符
        trim: true, //去掉首尾空格 
        lowercase: true, //转化为小写
        uppercase: false, //妆化为大写
       	
        //设置索引,普通索引和唯一索引设置一个就行
        index:true,	   //普通索引  
        quire:true,    //唯一索引
        
        //数据校验
        required:true, //表示该数据必须传入
       	max:20,        //用于Number数据类型,最大值
        min:10,        //用于Number数据类型,最小值
        enum:[0,1,2]   //枚举类型,要求数据必须满足枚举值,要求增加的值必须在枚举的值范围中,注意enum必须使用在string类型,不然不会生效
        match:/^sn(.*)/i   //增加的数据必须符合match(正则)的规则
        maxlength: 20    //最大值 ,例如规定字符串的最大长度
        maxlength:10     //最小值 ,例如规定字符串的最小长度
    
        //定义一个自定义校验器
    	validate: (sn) => {
    		return sn.length >= 20 //当sn的长度大于20的时候返回true,表示验证通过,false时验证失败
		}
    }
})

4.定义数据库模型,操作数据库

/* 
	model的第一个参数,注意:
		1.首字母大写
		2.要和数据库表(集合)名称对应
		这个模型会和模型名称相同的复数的数据库表建立连接 eg: User -> users
*/
/*
	model的第二个参数,即为上面定义的Schema
*/
const User = mongoose.model("User", UserSchema);
/*
	model的第三个参数,如果有第三个参数则连接第三个参数传入的值对应的数据库表
*/
const User = mongoose.model("USer", UserSchema, 'user')  //连接的是user的数据库表

5.查询users表的数据

User.find({}, (err, doc) => {
    if(err) {
        console.log(err)
        return
    }
    console.log(doc)
})

6.增加数据

//增加操作需要实例化
//1.实例化model,传入增加的数据
const u = new User({
    name:"李四",
    age:20,
    status:1
})
//2.执行操作
u.save((err) => {
    if(err) {
        console.log(err)
        return
    }
    console.log("增加成功")
})

7.更新数据

User.updateOne({"name":"李四"},{"name":"张三"}, (err) => {
    if(err) {
        console.log(err)
        return
    }
    console.log("更新成功")
})

8.删除数据

User.deleteOne({"name":"张三"}, (err, result) => {
    if(err) {
        console.log(err)
        return
    }
    console.log(result)
})

(二)Mongoose中使用聚合管道

//数据模拟
db.order.insert({"order_id":"1","uid":"10","trade_no":"111","all_price":100,"all_num":2})
db.order.insert({"order_id":"2","uid":"7","trade_no":"222","all_price":90,"all_num":2})
db.order.insert({"order_id":"3","uid":"9","trade_no":"333","all_price":20,"all_num":6})

db.order_item.insert({"order_id":"1","title":"商品鼠标1","price":50,num:1})
db.order_item.insert({"order_id":"1","title":"商品键盘2","price":50,num:2})

db.order_item.insert({"order_id":"2","title":"牛奶","price":50,"num":1})
db.order_item.insert({"order_id":"2","title":"酸奶","price":40,"num":1})

db.order_item.insert({"order_id":"3","title":"矿泉水","price":2,"num":5})
db.order_item.insert({"order_id":"3","title":"毛巾","price":10,"num":1})

表关联查询

有两个表 order 和 order_item
表order的模型为OrderModel
表oder_item的模型为OrderItemModel

OrderModel.aggregate([
    {
        $lookup:{
            from: "order_item",
            localField: "order_id",
            foreignField: "order_id",
            as: "items"
        }
    }
], (err, docs) => {
    if(err) {
        console.log(err)
        return
    }
    console.log(docs)
})
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值