Mongoose基础篇

Mongoose基础篇

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 下载

你可以在mongodb官网下载该安装包,地址为 http://www.mongodb.org/downloads

Schema 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力

ModelSchema发布生成的模型,具有抽象属性和行为的数据库操作对

EntityModel创建的实体,他的操作也会影响数据库

SchemaModelEntity的关系 :
Schema生成ModeModel创造EntityModelEntity都可对数据库操作造成影响,但ModelEntity`更具操作性。

MongoDB 使用

1.首先你必须安装MongoDB和NodeJS

2.在项目只能够创建一个数据库连接,如下:

var mongoose = require('mongoose');    //引用mongoose模块
var db = mongoose.createConnection('localhost','test'); //    创建一个数据库连接

3.打开本机localhost的test数据库时,我们可以监测

4.在工作文档中定义一个Schema

var userSchema=new mongoose.Schema({
username:String,
password:String,
email:String,
});

schemas中的数据类型有以下几种:

  • String

  • Number

  • Date

  • Boolean

  • Buffer

  • ObjectId

  • Mixed

  • Array

特别需要说明一下ObjectId类型和Mixed类型以及Array类型,在schemas中声明这几

种类型的方式如下:

ObjectId就类似于唯一键值

projectSchema.add({

owner: mongoose.Schema.Types.ObjectId
})

//混合类型,顾名思义,就是说里面可以放置任意类型的数据,有两种方式创建该类型数据

//方式一:直接赋予一个空的字面量对象
vardjSchema= new mongoose.Schema({
mixedUp: {}
});

//方式二:根据Schemas.Types中值来赋予
vardjSchema= new mongoose.Schema({
mixedUp: Schema.Types.Mixed
});

//Array类型数据有两种创建方式,一种是简单数组创建:
var userSchema = new mongoose.Schema({
name: String,
emailAddresses: [String]
});

//第二种方式就是复杂类型数据数组,例如我们可以再数组中添加不同类型的schemas:

 var emailSchema = new mongoose.Schema({
 email: String,
 verified: Boolean
});
 var userSchema = new mongoose.Schema({
 name: String,
 emailAddresses: [emailSchema]
 });
 //注意:如果定义一个空的数据的话,则会创建为一个混合类型数据的数组:
 var emailSchema = new mongoose.Schema({
 email: String,
 verified: Boolean
 });
 var userSchema = new mongoose.Schema({
 name: String,
 emailAddresses: [emailSchema]
 });

5 将Schema发布为Model,并且输出

module.exports={
users:mongoose.model('users',userSchema,'users')
}

// model后的参数 第一个users是模型model的名字,可以随便取名

// 参数二是产出model的Schema名,和上面的要对应,

// 参数3是数据库下的集合名称,可以随意取

6.我们甚至可以为此Schema创建方法

//为Schema模型追加speak方法
PersonSchema.methos.speak = function(){
 console.log('我的名字叫'+this.name);
}
var PersonModel = db.model('Person',PersonSchema);
var personEntity = new PersonModel({name:'Krouky'});
personEntity.speak();//我的名字叫Krouky

7 如果要执行查询,需要依赖Model,当然Entity也是可以做到的

 PersonModel.find(function(err,persons){
  //查询到的所有person
});

查找数据和读取数据的方法

查询的方式

通常有2种查询方式,一种是直接查询,一种是链式查询(2种查询都是自己命名的)
直接查询 在查询时带有回调函数的,称之为直接查询,查询的条件往往通过API来设定,例如:

PersonModel.findOne({'name.last':'dragon'},'some     select',function(err,person){
  //如果err==null,则person就能取到数据
});

链式查询 在查询时候,不带回调,而查询条件通过API函数来制定,例如:

var query = PersonModel.findOne({'name.last':'dragon'});
query.select('some select');
query.exec(function(err,pserson){
//如果err==null,则person就能取到数据
  });
  这种方式相对直接查询,分的比较明细,如果不带callback,则返回query,query    没有执行的预编译查询语句,该query对象执行的方法都将返回自己,只有在执行    exec方法时才执行查询,而且必须有回调。    
更新数据

有三种方式来更新数据:

(1)update(conditions,update,options,callback);

该方法会匹配到所查找的内容进行更新,不会返回数据;

(2)findOneAndUpdate(conditions,update,options,callback);

该方法会根据查找去更新数据库,另外也会返回查找到的并未改变的数据;

(3)findByIdAndUpdate(conditions,update,options,callback);

该方法跟上面的findOneAndUpdate方法功能一样,不过他是根据ID来查找文档并更新的。

三个方法都包含四个参数,一下稍微说明一下几个参数的意思:

conditions:查询条件

update:更新的数据对象,是一个包含键值对的对象

options:是一个声明操作类型的选项,这个参数在下面再详细介绍

callback:回调函数

对于options参数,在update方法中和findOneAndUpdate、findByIdAndUpdate

两个方法中的可选设置是不同的;

//在update方法中,options的可选设置为:

{

safe:true|false, //声明是否返回错误信息,默认true

upsert:false|true, //声明如果查询不到需要更新的数据项,是否需要新插入一

条记录,默认false

multi:false|true, //声明是否可以同时更新多条记录,默认false

strict:true|false //声明更新的数据中是否可以包含在schema定义之外的字段

数据,默认true

}

//对于findOneAndUpdate、findByIdAndUpdate这两个方法,他们的options可

选设置项为:

{

new:true|false, //声明返回的数据时更新后的该是更新前的,如果为true则返回

更新后的,默认true

upsert:false|trure,

sort:javascriptObject, //如果查询返回多个文档记录,则可以进行排序,在这

里是根据传入的javascript object对象进行排序

select:String //这里声明要返回的字段,值是一个字符串

}

数据删除

跟更新数据一样,也有三种方法给我们删除数据:

remove();

findOneAndRemove();

findByIdAndRemove();

数据验证

mongoose内置数据验证

在mongoose中,数据验证这一层是放在schema中的,mongoose已经帮我们做了很多内

置的数据验证,有一些验证是针对某些数据类型的,也有一些是针对所有数据类型的。

能够作用在所有数据类型上的验证有require,意思就是该字段是否是必须的,例如:

email: { type: String, unique: true, required: true }

上面的代码就定义了一个email是必须的schema.

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2021 魏姣
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信