MongoDB入門 和nodejs操作


簡介

  MongoDB 

  開源,高性能的NoSQL數據庫;支持索引、集群、復制和故障轉移、各種語言的驅動程序;高伸縮性;

  NoSQL畢竟還處於發展階段,也有說它的各種問題的:http://coolshell.cn/articles/5826.html

    官網地址:http://www.mongodb.org/

  API Docs:http://docs.mongodb.org/manual/

  node-mongodb-native

  mongodb的nodejs驅動;

  GitHub地址:https://github.com/mongodb/node-mongodb-native

MongoDB安裝(windows)

  官方安裝說明: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/

  按照官方說明在win7 64位環境下配置還是遇到了問題,我還是把我安裝配置的過程寫一下

  

  下載MongoDB並安裝

  下載地址:http://www.mongodb.org/downloads

  創建數據庫和日志存放目錄

  在C盤根目錄下新建“M_DB”和“M_LOG”兩個文件夾,分別存放數據庫文件和日志文件

  創建一個config文件

  打開目錄“C:\Program Files\MongoDB 2.6 Standard\bin”,並在此目錄下新建一個mongo.config文件,文件內容如下

##數據庫目錄
dbpath=C:\M_DB

##日志輸出文件
logpath=C:\M_LOG\mongodb.log

  添加環境變量

  在環境變量PATH中加入“C:\Program Files\MongoDB 2.6 Standard\bin“

  以Windows服務器運行MongoDB

  以管理員方式打開CMD窗口,運行如下命令安裝MongoDB服務,可以在 “控制面板\所有控制面板項\管理工具\服務”找到名為“MongoDB”的服務右鍵啟動

mongod --config "C:\Program Files\MongoDB 2.6 Standard\bin\mongo.config" --install

  啟動服務

  在CMD窗口中運行如下命令,也可以在可以在 “控制面板\所有控制面板項\管理工具\服務”

net start mongodb

  測試連接

  在CMD中運行如下命令,查看結果

mongo

  

  安裝成功!

 

  最后兩步非必需;MongoDB默認端口是27017,可以修改!

 

  對於“C:\Program Files\MongoDB 2.6 Standard\bin”目錄下的exe程序,做個簡單的說明,可能更利於了解可以做些什么操作,基礎學習關注mongod.exe和mongo.exe即可

  mongo.exe:客戶端,支持js語法

  mongod.exe:服務端

  mongodump.exe:備份工具

  mongorestore.exe:恢復工具

  mongoexport.exe:導出工具

  mongoimport.exe:導入工具

  mongostat.exe:實時性能監控工具

  mongotop.exe:跟蹤MongDB實例讀寫時間工具

 

  更多詳細解釋或操作可以查看:http://docs.mongodb.org/manual/reference/program/

MongoDB基本語法和操作入門(mongo.exe客戶端操作)

  MongoDB已經安裝好,下面先對MongoDB進行一個簡單的入門,再用node-mongodb-native去操作MongoDB

  庫操作

  新建數據庫:第一步:use 新建數據庫名;第二步:進行此庫相關的操作;如果不進行第二步,該數據庫不會被創建

  查看數據庫:show dbs;

  新建表:db.createCollection('要新建的表名');

  查看當前數據庫下表: show collections;

  刪除當前數據庫指定表:db.表名.drop();

  刪除當前數據庫:db.dropDatabase();

 

  示例操作如下圖:

  

  1.默認為存在“admin”和“local”兩個數據庫;admin數據庫是存放管理員信息的數據庫,認證會用到;local是存放replication相關的數據;這兩處本篇都沒有涉及到;

  2.find();是個查詢操作,后面會講到,上面用到主要是為了演示use不存在的庫后,進行相關操作會創建出這個庫;

  3.MongoDB沒有像MySQL或MSSQL等數據庫這么嚴格的規定,不是非得要先建庫、建表、建各種字段,以后的操作中慢慢的會體會到^_^!

  

  插入

  方法一:db.表名.insert(數據);

  

  1.從上圖操作可以看出,沒有去創建“tb1”表,其實通過插入操作也會自動創建

  2._id,是mongodb自已生成的,每行數據都會存在,默認是ObjectId,可以在插入數據時插入這個鍵的值(支持mongodb支持的所有數據類型)  

  方法二:db.表名.save(數據);

     

  1.從上圖操作可以看出,save也可達到insert一樣的插入效果

  2._id可以自已插入

  3.一個表中不一定要字段都相同

 

  那它們有什么區別?

  

  從圖中操作就可以看出,雖然insert和save方法都可以插入數據,當默認的“_id”值已存在時,調用insert方法插入會報錯;而save方法不會,會更新相同的_id所在行數據的信息

 

  查詢  

  查詢表中所有數據:db.表名.find();

  按條件查詢(支持多條件):db.表名.find(條件); 

  查詢第一條(支持條件):db.表名.findOne(條件);

  限制數量:db.表名.find().limit(數量);

  跳過指定數量:db.表名.find().skip(數量);

  

  從上圖中可以看出具體用法,批量插入默認數據我用了一個javascript語法循環;

  

  比較查詢

  大於:$gt

  小於:$lt

  大於等於:$gte

  小於等於:$lte

  非等於:$ne

  

  上面看到了AND的關系,或者的關系應該怎么用?

  或者:$or

  

  

  in和not in查詢(包含、不包含)
  $in
  $nin
    

 

  查詢數量:db.表名.find().count();

  排序:db.表名.find().sort({"字段名":1}); 

     1:表示升序  -1:表示降序

  指定字段返回: db.表名.find({},{"字段名":0});  

     1:返回  0:不返回

  

  

  查詢就講到這里了,感覺查詢示例一下講不完,還有些高級查詢,大家自行去了解一下吧^_^!

  

  修改

  前面save在_id字段已存在是就是修改操作,按指定條件修改語法如下

  db.表名.update({"條件字段名":"字段值"},{$set:{"要修改的字段名":"修改后的字段值"}});

  

 

  刪除

  db.表名.remove(條件);

  

 

  存儲過程

   創建存儲過程:

db.system.js.save({_id:"存儲過程ID", 
value:function(參數){  
        -- 邏輯主體; 
        return 返回; 
}});                

  調用存儲過程

db.eval("存儲過程ID()");

  

  所有存儲過程都存放在db.system.js中

 

  MongoDB基本操作就講這么多了,基本夠用,深入學習大家自已去看看API^_^!

 

nodejs操作MongoDB

  先用npm安裝mongodb

npm install mongodb

  安裝成功后,繼續在上面操作創建的庫和表中操作

  

  插入

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';

var insertData = function(db, callback) {
//連接到表
var collection = db.collection('tb2');
//插入數據
var data = [{"name":'wilson001',"age":21},{"name":'wilson002',"age":22}];
collection.insert(data, function(err, result) {
if(err)
{
console.log('Error:'+ err);
return;
}
callback(result);
});
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
console.log("連接成功!");
insertData(db, function(result) {
console.log(result);
db.close();
});
});

復制代碼
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';    

var insertData = function(db, callback) {  
    //連接到表  
    var collection = db.collection('tb2');
    //插入數據
    var data = [{"name":'wilson001',"age":21},{"name":'wilson002',"age":22}];
    collection.insert(data, function(err, result) { 
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }     
        callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連接成功!");
    insertData(db, function(result) {
        console.log(result);
        db.close();
    });
});
復制代碼

  查詢

 

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';  

var selectData = function(db, callback) {  
  //連接到表  
  var collection = db.collection('tb2');
  //查詢數據
  var whereStr = {"name":'wilson001'};
  collection.find(whereStr).toArray(function(err, result) {
    if(err)
    {
      console.log('Error:'+ err);
      return;
    }     
    callback(result);
  });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
  console.log("連接成功!");
  selectData(db, function(result) {
    console.log(result);
    db.close();
  });
});

復制代碼
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';  

var selectData = function(db, callback) {  
  //連接到表  
  var collection = db.collection('tb2');
  //查詢數據
  var whereStr = {"name":'wilson001'};
  collection.find(whereStr).toArray(function(err, result) {
    if(err)
    {
      console.log('Error:'+ err);
      return;
    }     
    callback(result);
  });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
  console.log("連接成功!");
  selectData(db, function(result) {
    console.log(result);
    db.close();
  });
});
復制代碼

  修改

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';    

var updateData = function(db, callback) {  
    //連接到表  
    var collection = db.collection('tb2');
    //更新數據
    var whereStr = {"name":'wilson001'};
    var updateStr = {$set: { "age" : 100 }};
    collection.update(whereStr,updateStr, function(err, result) {
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }     
        callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連接成功!");
    updateData(db, function(result) {
        console.log(result);
        db.close();
    });
});

復制代碼
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';    

var updateData = function(db, callback) {  
    //連接到表  
    var collection = db.collection('tb2');
    //更新數據
    var whereStr = {"name":'wilson001'};
    var updateStr = {$set: { "age" : 100 }};
    collection.update(whereStr,updateStr, function(err, result) {
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }     
        callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連接成功!");
    updateData(db, function(result) {
        console.log(result);
        db.close();
    });
});
復制代碼

  刪除

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';  

var delData = function(db, callback) {  
  //連接到表  
  var collection = db.collection('tb2');
  //刪除數據
  var whereStr = {"name":'wilson001'};
  collection.remove(whereStr, function(err, result) {
    if(err)
    {
      console.log('Error:'+ err);
      return;
    }     
    callback(result);
  });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
  console.log("連接成功!");
  delData(db, function(result) {
    console.log(result);
    db.close();
  });
});

復制代碼
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';  

var delData = function(db, callback) {  
  //連接到表  
  var collection = db.collection('tb2');
  //刪除數據
  var whereStr = {"name":'wilson001'};
  collection.remove(whereStr, function(err, result) {
    if(err)
    {
      console.log('Error:'+ err);
      return;
    }     
    callback(result);
  });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
  console.log("連接成功!");
  delData(db, function(result) {
    console.log(result);
    db.close();
  });
});
復制代碼

  調用存儲過程

var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';    

var invokeProcData = function(db, callback) {  
    //存儲過程調用
    db.eval('get_tb2_count()', function(err, result) { 
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }             
        callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連接成功!");
    invokeProcData(db, function(result) {
        console.log(result);
        db.close();
    });
});

復制代碼
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';    

var invokeProcData = function(db, callback) {  
    //存儲過程調用
    db.eval('get_tb2_count()', function(err, result) { 
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }             
        callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連接成功!");
    invokeProcData(db, function(result) {
        console.log(result);
        db.close();
    });
});
復制代碼
復制代碼
var MongoClient = require('mongodb').MongoClient;
var DB_CONN_STR = 'mongodb://localhost:27017/wilsondb1';    

var invokeProcData = function(db, callback) {  
    //存儲過程調用
    db.eval('get_tb2_count()', function(err, result) { 
        if(err)
        {
            console.log('Error:'+ err);
            return;
        }             
        callback(result);
    });
}

MongoClient.connect(DB_CONN_STR, function(err, db) {
    console.log("連接成功!");
    invokeProcData(db, function(result) {
        console.log(result);
        db.close();
    });
});
復制代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM