知识点 mongoost

mongoos学习mongoose是mongoDB的一个对象模型工具,是基于node-mongodb-native开发的mongoDB的nodejs驱动,能够在异步的环境下执行。同时它也是针对mongoDB操做的一个对象模型库,封装了mongoDB对文档的一些增删改查等经常使用方法,让nodejs操做mongoDB数据库变得更加容易。·安装mongoosenpm install mongoose·引用mongoosevar mongoose = require('mongoose')·使用mongoose链接数据库var db = mongoose.connect('mongodb://user:pass@localhost:port/database')·执行下面代码检查默认数据库test,是否能够正常链接成功//2 加载模块var mongoose = require("mongoose");//3. 链接数据库 mongod 服务器端  mongo客户端//数据库的名称能够是不存在 建立一个zf数据库var db = mongoose.connect("mongodb://123.57.143.189:27017/zf");//若是链接成功会执行error回调db.connection.on("error", function (error) {    console.log("数据库链接失败:" + error);});//若是链接成功会执行open回调db.connection.on("open", function () {    console.log("数据库链接成功");});//定义一个 schema,描述此集合里有哪些字段,字段是什么类型//只有schema中有的属性才能被保存到数据库中var PersonSchema = new mongoose.Schema({    name : { type:String },    home : { type:String },    age  : { type:Number, default:0 },    time : { type:Date, default:Date.now },    email: { type:String,default:''}});//建立模型,能够用它来操做数据库中的person集合,指的是总体var PersonModel = db.model("person", PersonSchema);//根据模型建立实体,是指的个体对象var personEntity = new PersonModel({    name : "zf",    age  : 6,    email: "zf@qq.com",    home:'beijing'});//用save 方法把本身保存到数据库中personEntity.save(function(error,doc){    if(error){        console.log("error :" + error);    }else{        console.log(doc);    }});若是要经过mongoose建立一个集合并对其进行增删改查,就须要用到Schema(数据属性模型)、Model、EntitySchema简述这是一种以文件形式存储的数据库模型骨架,没法直接通往数据库端,也就是说它不具有对数据库的操做能力,仅仅只是数据库模型在程序片断中的一种表现,能够说是数据属性模型(传统意义的表结构),又或者是集合的模型骨架。基本属性类型有字符串、日期型、数值型、布尔型、null、数组、内嵌文档等定义一个Schema:var PersonSchema = new monoose.Schema({   name:{type:String},   age:{type:Number,default:0}  ,   time:{type:Date,default:Date.now},   email:{type:String,default:''}})Model简述由Schema构造生成的模型,除了Schema定义的数据库骨架之外,还具备数据库操做的行为,相似于管理数据属性、行为的类。经过Schema建立Model//建立模型,能够用它来操做数据库中的person集合,指的是总体。建立一个person集合var PersonModel = db.model("person", PersonSchema);person:数据库中的集合名称,当咱们对其添加数据时若是person已经存在,则会保存到其目录下,若是未存在,则会建立person集合,而后再保存数据。有了model,也就有了操做数据的能力。建立一个Model模型,须要指定两点:1,集合名称;2,集合的Schema结构对象。知足这两点,就能够操做数据库啦Entity简述由Model建立的实体,使用save方法保存数据,Model和Entity都有能影响数据库的操做,但Model比Entity更具操做性。建立Entity成功后,Schema的属性就变成了Model和Entity的公共属性了。使用Model建立Entity//根据模型建立实体,是指的个体对象var personEntity = new PersonModel({    name : "zf",    age  : 6,    email: "zf@qq.com",    home:'beijing'});mongoose基础操做·查询  查询分为多种类型,如条件查询、过滤查询等。obj.find(查询条件,field,callback),field省略或为null,则返回全部属性;field中把须要显示的属性设置为大于零的数则返回该属性,_id不指定默认返回,设置_id为0则不返回该属性,其余字段不指定,默认不返回Model.find({},function(error,docs){    //若没有向find传递参数,默认的是显示全部文档})查询就是返回一个集合中文档的子集,mongoose模型提供了find、findOne和findById方法用于文档查询findOne查询单条,当查询到一个符合条件的数据时,就会中止继续查询并返回查询结果。/建立模型,能够用它来操做数据库中的person集合,指的是总体var PersonModel = db.model("person", PersonSchema);//指定返回的字段 1表示 返回 0 不返回 ,,//若是不指定的字段默认不返回//_id若是不指定也会返回,若是不想让他返回须要显式指定为0PersonModel.find({},{name:1, age:1, _id:0},function(err,docs){    console.log(docs);})//当找到第一条匹配的记录时就马上返回,再也不继续查找了,返回单个对象PersonModel.findOne({name:/^\w+9$/},{name:1, age:1, _id:0},function(err,doc){    console.log(doc);})//按照ID进行查询PersonModel.findById('56ee117356acb568054dd6d4',{name:1, age:1, _id:0},function(err,doc){    console.log(doc);})-高级查询  使用$gt(>)、$lt(<)、$lte(<=)、$gte(>=)、$ne(不等于)、$in(包含)、$or(或者)、$exists(是否存在)操做符进行排除性的查询//建立模型,能够用它来操做数据库中的person集合,指的是总体var PersonModel = db.model("person", PersonSchema);PersonModel.find({'age':{"$gt":6}},{name:1, age:1, _id:0},function(err,docs){//查询age>6的数据    console.log(docs);})PersonModel.find({'age':{"$gt":6,“$lt”:9}},{name:1, age:1, _id:0},function(err,docs){//查询6<age<9的数据    console.log(docs);})PersonModel.find({"name":{"$ne":"zf"},'age':{"$gt":6,“$lt”:9}},{name:1, age:1, _id:0},function(err,docs){//查询name!='zf'&&6<age<9的数据    console.log(docs);})PersonModel.find({"name":{"$in":"zf"}},{name:1, age:1, _id:0},function(err,docs){//查询name=='zf'的全部数据    console.log(docs);})PersonModel.find({"age":{"$in":[6,7]}},{name:1, age:1, _id:0},function(err,docs){//查询age==6或7的全部数据    console.log(docs);})PersonModel.find({ age:{ $in: 6}},function(error,docs){    //查询age等于6的全部数据    console.log(docs);});PersonModel.find({ age:{$in:[6,10000]}},function(error,docs){    //能够把多个值组织成一个数组    console.log(docs);});PersonModel.find({email:'email',"$or":[{"name":"zfpx1"},{"age":2000}]},function(error,docs){    //查询name为zfpx或age为6的所有文档    console.log(docs);});var start = new Date();var end = new Date();PersonModel.find({time:{$lt:end},time:{$gt:start}},function(error,docs){    //查询name为zfpx或age为6的所有文档    console.log(docs);});-游标操做  数据库使用游标返回find的执行结果,客户端对游标的实现一般可以对最终结果进行有效的控制。能够限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各类排序PersonModel.find({name:/zf/},null,{limit:10},function(err,docs){    console.log(docs);});//如今要分页查询,每页3条,查询第2页//skip 跳过的条数 limit 限制返回的条数 sort排序 1升序 -1 降序 执行的时候会先排序再skip,再limitPersonModel.find({},{_id:0,name:1},{limit:3,skip:3,sort:{age:1,name:-1}},function(err,docs){    console.log(docs);});·保存  -Model提供了一个create方法来对数据进行保存。 Model.create(文档数据,callback)//向集合中插入10个文档for(var i=1;i<=10;i++){    //向数据中保存文档    PersonModel.create({name:'zfpx'+i,age:i},function(err,doc){        if(err)console.log(err);        else          console.log(doc);// doci    });    //全部的异步方法都是在全部的同步方法执行完毕以后才执行的    console.log(i);}-Entity提供了一个save方法对数据进行保存。Entity.save(文档数据,callback)//根据模型建立实体,是指的个体对象var personEntity = new PersonModel({    name : "zf",    age  : 6,    email: "zf@qq.com",    home:'beijing'});//用save 方法把本身保存到数据库中personEntity.save(function(error,doc){    if(error){        console.log("error :" + error);    }else{        console.log(doc);    }});·数据更新Model.update(查询条件,更新对象,callback) 默认更新一条文档,若想所有更新,须要加上{multi:true}//建立模型,能够用它来操做数据库中的person集合,指的是总体var PersonModel = db.model("person", PersonSchema);//$set更新器 指定要更新的字段var update = {$set : { age : 100 }};//更新//multi 更新匹配到的全部的记录PersonModel.update({name : 'zf'}, update,{multi:true}, function(error){    if(error) {        console.log(error);    } else {        console.log('Update success!');    }});·数据删除 Model.remove(查询条件,callback)PersonModel.remove({name:'zf'},function(err,docs){    //result: { ok: 1, n: 3 }    console.log(docs);});
相关文章
相关标签/搜索