Mongoose

Mongoose

mongoose的好处

  • 可以为文档创建一个模型结构
  • 可以对模型中的对象/文档进行验证
  • 数据可以用个类型zhu7anhuan转换为对象模型
  • 可以使用中间件来应用业务逻辑挂钩
  • 比Node原生的MongoDB驱动更容易

mongoose提供的新对象

  • schema对象定义约束了数据库中的文档结构

  • Model对象作为结合中的所有文档的表示,相当于MongoDB中的集合collection

  • Document对象表示结合中的具体文档,相当于集合中的一个集体的文档

mongoose的使用

	/*
	1.下载安装mongoose
	npm i mongoose --save
	2. 在项目中引入mongoose
	var mongoose = require("mongoose");
	3.链接MongoDB数据库
	mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名',{useMongoClient:true}) ,端口号是默认端口号,27017,则可以省略不写
	4. 断开数据库链接(一般不需要调用,只需要连接一次,除非项目停止服务器关闭)
	mongoose.disconnect()
	*/
	var mongoose = require("mongoose")
    mongoose.connect("mongodb://127.0.0.1/mongoose_test",{useMongoClient:true})
   mongoose.connection.once("open",function(){
	console.log("连接成功")
   })


	mongoose.connection.once("close",function(){
	console.log("断开成功")
   })
	//断开连接
	mongoose.disconnect()

Schema

	//
	var Schema = mongoose.Schema//他是一个构造函数
	var stuSchema = new Schema({
		name:String,
        age:Number,
        gender:{
            type:String,
            default:"female"
            //传对象可以设置默认的
        },
        address:String
    });
	

Model

    //Model代表数据库中的集合,通过model才能对数据库进行操作,插入的集合会变为复数加s
        var StuModel = mongoose.model("student",stuSchema)
        //向数据库中插入一个文档
        StuModel.create({
            name:"孙悟空",
            age:18,
            gender:"male",
            address:"花果山"
        },function(err){
        if(!err){
            console.log("插入成功")
        }
        })

            //数据库中输入:db.students.find()即可查找

        //有了model就可对数据库进行增删改查
        //Model.create(doc(s),[callback])
        //可以是一个或多个文档,回调函数不传也可
        StuModel.create([
            {
                name:"zhubajie",
                age:29
                gender:"male",
                address:"zzz"
            },
            {
                name:"tangseng",
                age:11,
                gender:"male",
                address:"xxx"
            }
        ],function(err){
            if(!err){
            console.log("插入成功")
            }
        })

        /*
        Model.find(conditions,[projrction],[options],[callback])
        查询所有符合条件的文档
        conditions 查询的条件
        projection 投影
        options 查询选项(skip limit)
        callback 回调函数,查询结果会通过回调函数返回,而且回调函数必须传,不传没有查询功能
        */
        StuModel.find({name:"tangseng"},{name:1,_id:0},{skip:3,limit:1},function(err,docs){
            //projection参数有两种方式,{"name age -id"}也可以这样写,表示只传入name age 不传入id
        if{!err}{
            console.log(docs)
            console.log(docs[0].name)
        }
        })
        //总会返回一个数组,没有查到返回一个空数组
        StuModel.findById("xxxxxxxx",function(err,doc){
        if(!err){
            console.log(doc)
            //通过find()查询的结果,返回的对象,就是document,文档对象
            //document对象是model的实例
            console.log(doc instanceof StuModel)//返回true
        }
        })

        /*
            修改,Model.update(conditions,doc,[options],[callback])
        */

        //修改tangseng年龄为20
        StuModel.update({name:"tangseng",{$set:{age:20}},function(){
            if(!err){
        console.log("成功")
            }
        }})

        /*统计数量
        length的话性能差,count性能好
        */
        StuModel.count({},function(err,count){
        if(!err){
            console.log(count)
        }
        })

Document

	//创建一个document
	var stu = new StuModel({
        name:"奔波霸",
        age:48,
        gender:"male",
        address:"碧波潭"
    	//这里没有传到数据库
    })
    stu.save(function(err){
		if(!err){
			console.log("保存成功")
        }
    })
	StuModel.findOne({},function(err,doc){
	 if(!err){
		/*
         console.log(doc)
         doc.update({$set:{age:28},function(err){
		if(!err){
			console.log("成功")
        }
         }})
     }
     */
         /*
     	doc.age=18
     	doc.save()
     */
    })
    doc.remove(function(err){
	if(!err){
		console.log("再见")
    }
    })
        //set 获取属性值
        console.log(doc.get("name"))
        //或是console.log(doc.age))
        // 设置属性值
        doc.set("name","朱小小")
        //或是doc.name="hhh"
        console.log(doc._id)
        
        //toObject()
       // 将document对象转换为一个普通的JS对象,转换为普通的js对象以后,注意所有的document对象的方法或属性都不能再操作数据库了
        console.log(o)
        doc=doc.toObject()
        delete doc.address;
        console.log(doc._id)

模块化思想:

-mongoose

​ --models

​ —student.js

​ --tools

​ —conn_mongo.js

​ —index.js

新建一个conn_mongo.js文件,定义一个模块,用来连接MongoDB数据库

	var mongoose = require ("mongoose")
    mongoose.connect ("monngodb://127.0.0.1/mongoose_test",{useMongoClient:true})
	mongoose.connection.once("open",function(){
        console.log("连接成功")
    	}
	)

然后新建一个student.js文件,用来定义student的模型,定义model模型

	var mongoose = require("mongoose")
    var Schema = mongoose.Schema;
	var stuSchema = new Schema({
		name:String,
        age:Number;
        gender:{
		type:String,
        default:"female"
    },
        address:String
    })
    //定义模型
    var StuModel = mongoose.model("student",stuSchema)
    module.exports = StuModel

新建一个index文件

	require("./tools/conn_mongo")
	var Student = require(./models/student)
    Student.find({},function(err,docs){
		if(!err){
			console.log(docs)
        }
    })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值