MongoDB的交互(mongodb/node-mongodb-native)、MongoDB入門

MongoDB javascript

開源,高性能的NoSQL數據庫;支持索引、集羣、複製和故障轉移、各類語言的驅動程序;高伸縮性;html

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

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

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

node-mongodb-nativegithub

mongodb的nodejs驅動;mongodb

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

MongoDB安裝(windows)

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

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

 

下載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 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 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();
    });
});
複製代碼

 

到此CRUD操做就完成,經過回調函數的result參數進行判斷均可以進行業務邏輯的進一步組合!

寫在以後...

本篇針對node-mongodb-native操做MongoDB沒有作更深的講解,緣由是針對它的進行再次封裝的東西不少,且更利於編程實現,好比:mongoosemongoskinmongolian等等,應用性不錯;

mongoose的可能用的比較多...

本文中不少地方我都仍是習慣的用表、行等術語去描述,其實對NoSQL來講並不對,只是有助於習慣了關係型數據庫的開發人員來解;

文章中「表」本應該描述爲「collection(集合)」;「行」應該描述爲「文檔(document)」,一個database中能夠有多個collection,一個collection中又能夠有多個document

文章中並無涉及認證的部分,你們自行去補一下,很是簡單,我文中也挺到了兩個默認數據庫中的「admin」數據庫

用CMD中使用mongo.exe操做時,插入中文遇一了問題,緣由是MongoDB默認編輯是utf-8,而CMD是GBK,因此在CMD窗口中執行這個命令修改編輯便可:chcp 65001

注意mongodb嚴格區分大小寫,好比查詢 db.tb2.find({"name":"wilson0"})和 db.tb2.find({"Name":"wilson0"}) 並非用的同一字段作的條件;

相關文章
相關標籤/搜索