mongoose食用姿势!

什么是Mongoose?

Mongoose库简而言之就是对node环境中MongoDB数据库操作的封装,一种对象模型工具,可以将数据库中的数据转换为JavaScript对象供我们使用。

下载mongoose?

npm insatll mongoose

如何使用mongoose?

require("mongoose");

mongoose官网

http://mongoosejs.com

mongoose入门

简单看一下官网的hello world入门代码

//    引包,并不需要引用mongodb这个包
    var mongoose = require('mongoose');
    //链接数据库,itatic是数据库名字
    mongoose.connect('mongodb://127.0.0.1:27017/itatic');
     
    //创建了一个模型。猫的模型。所有的猫,都有名字,是字符串。“类”。
    var Cat = mongoose.model('Cat', { name: String });
    //实例化一只猫
    var kitty = new Cat({ name: 'Zildjian' });
    //调用这只猫的save方法,保存这只猫
    kitty.save(function (err) {
      console.log('喵喵喵');
    });
     
    var tom = new Cat({"name":"汤姆"});
    tom.save(function(){
           console.log('喵喵喵');
    });

上述代码没有明显操作数据库的语句,例如前面的MongoDB的db.find,update,remove,insert等,很明显都是类方法使用,创建类,实例化类,使用类,操作类对象时候数据库以及被持久化了!

模型

//创建一个小狗模型
mongoose.model("dog",{name:String,age:Number})
//实例化这个小狗
var wangcai=new dog({"name":"旺财","age":4})
//然后把这个wangcai这个类进行save方法后就存入数据库中

mongoose所有的操作不慎对数据库操作,所有的操作都是对类、实例进行的。但是数据库的持久化自动完成了。

数据库连接

固定格式:

var mongoose = require('mongoose');
//创建数据库连接
var db      = mongoose.createConnection('mongodb://127.0.0.1:27017/haha');
//监听open事件
db.once('open', function (callback) {
    console.log("数据库成功连接");
});

定义模型

步骤:建立schema结构 → 定义静态方法 → 建立模型

创造schema结构

语法:new mongoose.Schema({})

实例:

var StudentShema = new mongoose.Schema({
"name":{type:String},
"sex":{type:String},
"age":{type:Number}

})

定义静态方法

语法:db.model({"Student",shema名字})

实例:

//查找的静态方法(只能定义在model层)
StudentSchema.statics.chazhao=function(name,callback){
  this.model("Student").find({"name":name},callback)
}
//修改的静态方法
StudentSchema.statics.xiugai=function(where,set,options,callback){
  this.model("Student").update(where,set,options,callback)
}

创建模型

//创建了一个模型,就是学生模型,就是学生类。
//类是基于schema创建的。
var studentModel = db.model('Student', studentSchema);

无需操作数据库,只需要考虑操作类,实例,让数据库变得简单!实例方法和静态模型方法进行数据库操作,数据库可以保持持久化!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

五个python常用运维脚本面试题实例

一、用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径 #!/usr/bin/env python import os for root,...

5427
来自专栏Pythonista

Django模型之Meta详解

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。而可用的选项大致包含以下几类

1062
来自专栏简书专栏

基于Pyecharts的词云图实战

标题中的英文首字母大写比较规范,但在python实际使用中均为小写。 本文的写作内容是将25000条评论当中的热词提取出来,并制作词云图 开发环境是jupy...

7523
来自专栏散尽浮华

linux下截取给定路径中的目录部分

在日常运维中,有时会要求截取一个路径中的目录部分。 截取目录的方法,有以下两种: 1)dirname命令(最常用的方法):用于取给定路径的目录部分。很少直接在s...

2415
来自专栏练小习的专栏

border的transparent与rgba(0)的区别是什么?

在用after和before做一个小的tips箭头的时候,发现一个很蛋疼的问题,boeder写成transparent和写成rgb(x,x,x,0),在webk...

18910
来自专栏Java编程技术

伪共享

计算机系统中为了解决主内存与CPU运行速度的差距,在CPU与主内存之间添加了一级或者多级高速缓冲存储器(Cache),这个Cache一般是集成到CPU内部的,所...

863
来自专栏软件开发 -- 分享 互助 成长

C++ STL之deque的基本操作

前两篇博文中已经介绍了vector和list的两种容器,我们发现他们各有各的优缺点,vector在内存中连续存储,支持随机访问,但是查找和删除的效率比较低,而l...

2295
来自专栏ShaoYL

预处理指令(文件的包含)

3229
来自专栏221-B

ARM汇编基础

在高级语言,如OC、C中,操作的对象是变量,而在ARM汇编语言中,操作的对象是寄存器(register)、内存(RAM)、栈(stack)。

1202
来自专栏流柯技术学院

linux awk命令详解

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为...

2393

扫码关注云+社区

领取腾讯云代金券