Mongoose好处

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

Mongoose提供的新对象

– Schema(模式对象) 对象定义约束了数据库中的文档结构

– Model 对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection

– Document 表示集合中的具体文档,相当于集合中的一个具体的文档

下载安装

  • npm i mongoose --save

基本用法

//引入
var mongoose = require("mongoose");
//连接数据库
mongoose.connect("mongodb://127.0.0.1/mongoose_test" , { useNewUrlParser: true, useUnifiedTopology:true}); mongoose.connection.once("open",function(){
console.log("--> 数据库连接成功");
}); mongoose.connection.once("close",function(){
console.log("--> 数据库连接已经断开");
}); //断开数据库连接
//mongoose.disconnect(); //将mongoose.Schema 赋值给一个变量
var Schema = mongoose.Schema; //创建Schema(模式)对象
var stuSchema = new Schema({ name:String,
age:Number,
gender:{
type:String,
default:"female"
},
address:String }); //通过Schema来创建Model
//Model代表的是数据库中的集合,通过Model才能对数据库进行操作
//mongoose.model(modelName, schema):
//modelName 就是要映射的集合名 mongoose会自动将集合名变成复数
var StuModel = mongoose.model("student" , stuSchema); /*
- 有了Model,我们就可以来对数据库进行增删改查的操作了 Model.create(doc(s), [callback])
- 用来创建一个或多个文档并添加到数据库中
- 参数:
doc(s) 可以是一个文档对象,也可以是一个文档对象的数组
callback 当操作完成以后调用的回调函数 查询的:
Model.find(conditions, [projection], [options], [callback])
- 查询所有符合条件的文档 总会返回一个数组
Model.findById(id, [projection], [options], [callback])
- 根据文档的id属性查询文档
Model.findOne([conditions], [projection], [options], [callback])
- 查询符合条件的第一个文档 总和返回一个具体的文档对象 conditions 查询的条件
projection 投影 需要获取到的字段
- 两种方式
{name:1,_id:0}
"name -_id"
options 查询选项(skip limit)
{skip:3 , limit:1}
callback 回调函数,查询结果会通过回调函数返回
回调函数必须传,如果不传回调函数,压根不会查询 */
//增:StuModel.create(doc, function(err){});
StuModel.create({
name:"张三",
age:16,
address:"北京"
},function (err) {
if(!err){
console.log("插入成功");
}
}); //查
StuModel.find({},"name age -_id", {skip:3 , limit:1} , function (err , docs) {
if(!err){
console.log(docs);
}
}); /*
修改
Model.update(conditions, doc, [options], [callback])
Model.updateMany(conditions, doc, [options], [callback])
Model.updateOne(conditions, doc, [options], [callback])
- 用来修改一个或多个文档
- 参数:
conditions 查询条件
doc 修改后的对象
options 配置参数
callback 回调函数
Model.replaceOne(conditions, doc, [options], [callback])
* */
StuModel.updateOne({name:"张三"},{$set:{age:20}},function (err) {
if(!err){
console.log("修改成功");
}
}); /*
删除:
Model.remove(conditions, [callback])
Model.deleteOne(conditions, [callback])
Model.deleteMany(conditions, [callback])
*/
StuModel.remove({name:"李四"},function (err) {
if(!err){
console.log("删除成功");
}
}); /*
Model.count(conditions, [callback])
- 统计文档的数量的
*/
StuModel.count({},function (err , count) {
if(!err){
console.log(count);
}
}); //创建一个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){
/*
update(update,[options],[callback])
- 修改对象
remove([callback])
- 删除对象 */
//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("大师兄再见~~~");
}
});*/ /*
get(name)
- 获取文档中的指定属性值
set(name , value)
- 设置文档的指定的属性值
id
- 获取文档的_id属性值
toJSON() ******
- 转换为一个JSON对象 toObject()
- 将Document对象转换为一个普通的JS对象
转换为普通的js对象以后,注意所有的Document对象的方法或属性都不能使用了 */
//console.log(doc.get("age"));
//console.log(doc.age); //doc.set("name","猪小小");
//doc.name = "hahaha"; //console.log(doc._id);
//var j = doc.toJSON();
//console.log(j); //var o = doc.toObject(); //console.log(o); doc = doc.toObject(); delete doc.address; console.log(doc._id); }
});

创建Schema模式对象

var userSchema = new Schema(definition, option);
  • options常用选项

    • autoIndex 布尔值,开启自动索引,默认true

    • bufferCommands 布尔值,缓存由于连接问题无法执行的语句,默认true

    • capped 集合中最大文档数量

    • collection 指定应用Schema的集合名称

    • id 布尔值,是否有应用于_id的id处理器,默认true

    • _id 布尔值,是否自动分配id字段,默认true

    • strict 布尔值,不符合Schema的对象不会被插入进数据库,默认true
  • 定义Schema模式对象
    • 模式为集合中的文档定义字段和字段类型。
    • 对于在模式中的每个字段,你都需要定一个特定的值类

      型。受支持的类型如下:

      • String
      • Number
      • Boolean
      • Array
      • Buffer
      • Date
      • ObjectId或Oid
      • Mixed
    • 需要为每个不同的文档类型都定义一个模式

创建Model模型对象

  • model(name, [schema], [collection] , [skipInit])

    • name参数相当于模型的名字,以后可以同过name找到模型。

    • schema是创建好的模式对象。

    • collection是要连接的集合名。

    • skipInit是否跳过初始化,默认是false
  • model对象的方法
    • remove(conditions, callback)
    • deleteOne(conditions, callback)
    • deleteMany(conditions, callback)
    • find(conditions, projection, options, callback)
    • findById(id, projection, options, callback)
    • findOne(conditions, projection, options, callback)
    • count(conditions, callback)
    • create(doc, callback)
    • update(conditions, doc, options, callback)
    • ...

创建Document文档对象

  • document对象的方法

    • equals(doc)
    • id
    • get(path,[type])
    • set(path,value,[type])
    • update(update,[options],[callback])
    • save([callback])
    • remove([callback])
    • isNew
    • isInit(path)
    • toJSON()
    • toObject()
    • ...

Mongoose 使用Node操作MongoDB的更多相关文章

  1. Node操作MongoDB并与express结合实现图书管理系统

    Node操作MongoDB数据库 原文链接:http://www.xingxin.me/ Web应用离不开数据库的操作,我们将陆续了解Node操作MongoDB与MySQL这是两个具有代表性的数据库, ...

  2. 使用node操作mongodb

    let mongodb = require('mongodb'); let MongodbClient = mongodb.MongoClient; MongodbClient.connect('mo ...

  3. node操作mongoDB数据库的最基本例子

    连接数据库 var mongo=require("mongodb"); var host="localhost"; var port=mongo.Connect ...

  4. node操作mongodb

    var mongodb = require('mongodb'); var server = new mongodb.Server('localhost', 27017, {auto_reconnec ...

  5. node操作MongoDB数据库之插入

    在上一篇中我们介绍了MongoDB的安装与配置,接下来的我们来看看在node中怎样操作MongoDB数据库. 在操作数据库之前,首先应该像关系型数据库一样建个数据库把... 启动数据库 利用命令提示符 ...

  6. mongoose - 让node.js高效操作mongodb

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  7. Node使用Mongoose操作MongoDB数据库——增删改查的实现

    当初刚出社会时就规划了下自己的职业生涯:先成为一名优秀的前端工程师,再成为一名全栈工程师(精通前端开发.后台开发和客户端开发),最后成为一名优秀的系统架构师.转眼间已经工作快三年,是时候迈出关键性的一 ...

  8. MONGOOSE – 让NODE.JS高效操作MONGODB(转载)

    Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. ...

  9. Node.js使用Mongoose包操作MongoDB数据库

    1. 安装Mongoose npm install mongoose 2. 使用 2.1 创建连接 var mongoose = require('mongoose'); mongoose.conne ...

随机推荐

  1. LC 454. 4Sum II

    Given four lists A, B, C, D of integer values, compute how many tuples (i, j, k, l) there are such t ...

  2. jQuery常用Method-API

    目的:对web页面(HTML/JSP/XML)中的任何标签,属性,内容进行增删改查 (1)DOM简述与分类 (A)DOM是一种W3C官方标准规则,可访问任何标签语言的页面(HTML/JSP/XML) ...

  3. 3.创建一个pod应用

    创建一个应用:k8s增删查改: pod创建:kubectl run nginx-deploy --image=nginx:1.14-alpine --port=80 --replicas=1 [roo ...

  4. Java端使用Batik将SVG转为PNG

    在上篇中,我们需要将Highcharts生成的图通过后台保存到pdf文件中,就需要对SVG进行转换. 这里就介绍一下使用Batik处理SVG代码的方法. 首先是jar包的获取地址,https://xm ...

  5. 文件夹的层级选择< OC实现 >

    类似文件夹的层级选择,可以搜索和创建新文件夹,点击路径标题可以返回对应层级. 界面有点丑,功能还是大概实现了的!! 代码有点多,还是附上地址吧,有兴趣的可以看看哟!!!    https://gith ...

  6. Spring Cloud(4):断路器(Hystrix)

    Hystrix介绍 相对于单一系统,分布式系统更容易遇到故障,所以我们一般通过构建冗余,使用集群和负载均衡来保证系统的弹性和高可用.当然,这种方式只解决了一部分问题,当服务崩溃时,我们很容易检测到,因 ...

  7. 前端学习(一) body标签(上)

    body标签中相关标签 主要内容: 字体标签:  h1~h6.<font>.<u>.<b>.<strong><em>.<sup> ...

  8. Zabbix介绍及安装(1)

    Zabbix的介绍 一.什么是zabbix及优缺点(对比cacti和nagios) Zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种 ...

  9. vs .net WebForm 模板添加注释

    首先说一点,好久不更新博客了.今天公司服务器不能用了,闲着没事儿,更新一篇博客. 今天要说的就是vs2010下,如何更改各种文件的模板,以省去每次新添加文件时,还得给文件添加文件标示注释等时间.很大程 ...

  10. 【图像处理】H.264开源解码器评测

    转自:http://wmnmtm.blog.163.com/blog/static/38245714201142883032575/ 要播放HDTV,就首先要正确地解开封装,然后进行视频音频解码.所以 ...