下載吧 - 綠色安全的游戲和軟件下載中心

          軟件下載吧

          當(dāng)前位置:軟件下載吧 > 數(shù)據(jù)庫 > DB2 > Mongodb 數(shù)據(jù)類型及Mongoose常用CURD

          Mongodb 數(shù)據(jù)類型及Mongoose常用CURD

          時間:2024-03-26 14:42作者:下載吧人氣:36

          前言

                看完了Node.js實(shí)戰(zhàn),其中在數(shù)據(jù)存儲部分提到了Redis、Mongodb,我自己也根據(jù)書中的介紹寫了幾個簡單的demo,在demo的過程首先遇到的問題就是數(shù)據(jù)類型和常見的CURD寫法。 mongodb的常見操作有兩種方式,一個是直接使用API,也就相當(dāng)于你在SQL Server客戶端中使用T-SQL編寫SQL語句來操作數(shù)據(jù)一樣,其次就是在程序中使用mongoose驅(qū)動來操作數(shù)據(jù),相當(dāng)于我們在程序里用ADO.NET或EF來操作數(shù)據(jù),如果你已經(jīng)寫了幾個調(diào)用API的demo,那么我建議再回過頭來看看mongoose的API,多看API,并且記住常見的幾個方法比如where,skip,sort等

               按照以往我們編寫Web方式,我們會關(guān)注數(shù)據(jù)從客戶端(Views)如果到Controller層, 然后把數(shù)據(jù)如何從Controller層傳遞到Dao層以及這兩個層面?zhèn)鬟f數(shù)據(jù)時的一些技巧,那么在Node里這種思維也是適用的。

          什么是MongoDB?

             MongoDB 是一個開源的 NoSQL 數(shù)據(jù)庫,相比 MySQL 那樣的關(guān)系型數(shù)據(jù)庫,它更為輕巧、靈活,非常適合在數(shù)據(jù)規(guī)模很大、事務(wù)性不強(qiáng)的場合下使用。 

          Mongoose

          Mongoose是封裝了MongoDB的操作的一個對象模型庫,為nodejs而生。就好像我們嫌原生javascript難寫,代碼量多,于是用jQuery庫一樣,因?yàn)镸ongoDB的操作接口復(fù)雜,不人性,所以有了Mongoose。這個庫完全是可選的。
             Mongoose的使用非常簡單,在App的package.js中的dependence中加入mongoose,然后 npm install 即可。

           Mongodb數(shù)據(jù)類型

             1、null。{“x”:null}。

              2、Boolean。{“x”:true} 、{“x”:false}。

             3、數(shù)據(jù)類型。在Mongodb Shell中默認(rèn)使用64位浮點(diǎn)型數(shù)據(jù),如{“x”:2.32}、{“x”:2},如果要使用整數(shù)類型則用{“x”:NumberInt(2)}、{“x”:NumberLong(2)}。

              4、字符串。Mongodb中字符串采用UTF-8編碼方式,{“x”:”hello world”}。

              5、日期類型。{“x”:new Date()}。

              6、正則表達(dá)式。 Mongodb中可使用和javascript相同的正則表達(dá)式 {“x”:/itbilu/i}。

              7、數(shù)據(jù)。Mongodb中數(shù)組的使用和javascript相同{“x”:[“hello”,”world”]}。

              8、內(nèi)嵌文檔。{“x”:{“y”:”Hello”}}。

              9、Id和ObjectId()。Mongodb每個文檔都會包含一個_id,如果你不指定時Mongodb會自動生成一個ObjectId對象。

              10、代碼。{“x”:function aa(){}}。

              11、二進(jìn)制。

          常見CURD

          var mongoose=require('mongoose');
          var Schema=mongoose.Schema;
          //1、連接字符串
          mongoose.connect('mongodb://localhost/test');
          //2、定義你的數(shù)據(jù)模型(也就是我們在關(guān)系數(shù)據(jù)庫中定義的Table)
          var TodoSchema=new Schema({
            title:String,
            finished:{type:Boolean,default:false},
            post_date:{type:Date,default:Date.now}
          });
          //3、訪問todo對象模型
          mongoose.model('Todo',TodoSchema);
          //添加
          exports.add=function(title,callback){
            var newTodo=new Todo();
            newTodo.title=title;
            newTodo.save(function(err){
              if(err){
                console.log(err);
                callback(err);
              }else{
                callback(null);
              }
            });
          }
          //查找單獨(dú)的數(shù)據(jù)
          var findTodoById=exports.findTodoById=function(id,callback){
            Todo.findOne({_id:id},function(err,doc){
              //doc也就是根據(jù)id得到的記錄值
              if(err){
                callback(err,null);
              }
              callback(null,doc);
            })
          }
          //刪除
          exports.delete=function(id,callback){
            exports.findTodoById(id,function(err,doc){
              if(err){
                callback(err);
              }else{
                doc.remove();
                callback(null);
              }
            })
          }
          //編輯標(biāo)題
          exports.editTitle=function(id,title,callback){
            exports.findTodoById(id,function(err,doc){
              if(err){
                callback(err);
              }else{
                doc.post_date=new Date();
                doc.title=title;
                doc.save(function(err){
                  if(err){
                    callback(err);
                  }else{
                    callback(null);
                  }
                })
              }
            })
          }
          exports.allTodos=function(callback){
            Todo.find({},callback);
          }
          //分頁查詢
          exports.TodoPageList=function(pageIndex,pageSize,callback){
            var m=Todo.find({}); //也有方法直接這樣寫: var m=this;
            var start=(pageIndex-1)*pageSize;
            m.skip(start);
            m.limit(pageSize);
            m.sort({'post_date','asc'}); //排序
            //根據(jù)關(guān)鍵字查詢后分頁
            //m.where('title','XXX');
            //執(zhí)行分頁查詢
            m.exec(function(err,rs){
              //分頁后的結(jié)果
              if(err){
                callback(err);
              }else{
                Todo.find(function(err,result){
                  /*
                    一般情況下的分頁你需要同時返回?cái)?shù)據(jù)庫記錄總數(shù)和分頁后的數(shù)據(jù),所以這里使用了Todo.find再查詢一次
                  */
                  callback({rows:rs,total:result.length});
                });
              }
            })
          }
          標(biāo)簽Mongodb,數(shù)據(jù),類型,Mongoose,常用,CURD

          相關(guān)下載

          查看所有評論+

          網(wǎng)友評論

          網(wǎng)友
          您的評論需要經(jīng)過審核才能顯示

          熱門閱覽

          最新排行

          公眾號

          主站蜘蛛池模板: 亚洲熟妇AV一区二区三区浪潮| 夜精品a一区二区三区| 精品成人一区二区三区免费视频| 精品福利视频一区二区三区 | 一区三区三区不卡| 国产精品伦子一区二区三区| 卡通动漫中文字幕第一区| www亚洲精品少妇裸乳一区二区 | 无码国产精品一区二区免费模式| 99精品国产一区二区三区不卡 | 免费在线视频一区| 在线|一区二区三区| 亚洲中文字幕一区精品自拍 | 久久精品综合一区二区三区| 极品少妇伦理一区二区| 国产高清一区二区三区视频| 黑巨人与欧美精品一区| 久久精品免费一区二区喷潮| 亚洲啪啪综合AV一区| 亚洲中文字幕在线无码一区二区| 精品福利一区二区三| 曰韩精品无码一区二区三区| 久久精品无码一区二区日韩AV| 日韩一区二区在线观看| 国产精品一区二区四区| 国产人妖视频一区在线观看| 精品国产一区二区三区久久狼 | 中文字幕一区视频一线| 极品少妇伦理一区二区| 视频在线观看一区二区| 国产一区二区三区在线| 精品一区二区三区在线播放| 白丝爆浆18禁一区二区三区| 欧洲精品码一区二区三区| 精品国产一区二区三区久| 国产一区二区三区日韩精品| 精品在线一区二区| 一区二区3区免费视频| 国产精品一区在线播放| 国产精品自拍一区| 亚洲熟女乱色一区二区三区|