知識點 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);});
相關文章
相關標籤/搜索