1. 程式人生 > >nodejs操作資料庫mongodb

nodejs操作資料庫mongodb

-------mongodb------------

使用:http://www.runoob.com/mongodb/mongodb-osx-install.html

********** 資料庫和檔案的主要區別
1、 資料庫有資料庫表、行和列的概念,讓我們儲存操作資料更方便
2、 資料庫提供了非常方便的介面,可以讓 nodejs、php java .net 很方便的實現增加修改刪 除功能。
**********
由於網際網路的迅速發展,雲端計算與 Web2.0。這樣大量的互動給資料庫提出了更高的效能要
求,傳統的資料庫(本文泛指 SQL 資料庫),即關係資料庫雖然具備良好的事物管理,
但在 處理大量資料 的應用 時很難 在效能 上滿足 設計要 求。NoSQL 就是主要為了解決當下大量高併發高要
求的資料 庫應用 需求,關係數 據庫 具有嚴 格的參 照性,一致性 ,可用 性,原子性 ,隔離 性等特 點,
   因此會產生一些例如表連線等操作,這樣會大大降低系統的效能。而在當前很多應用場景下對性  能的要求 遠遠強 於傳統 資料庫 關注的 點,NoSQL 就是為了解決大規模資料與多樣數 據種類 等問題,尤其是其中大資料的相關問題。 。
 NoSQL(NoSQL = Not Only SQL ),意即“不僅僅是 SQL”,它指的是非關係型的資料庫,是以 key-value 形式儲存,和傳統的關係型資料庫不一樣,不一定遵循傳統資料庫的一些基本要求,比如說遵循SQL 標準ACID 屬性、表結構等等。NoSQL 最早被提出是在 20 世紀 80 年代,在當時更多是強調的是與關係 資料庫區 別對待 ,最近這些年被提及的更多是強調協助解決大資料等相關問NoSQL 在大數 據時代有自己的意義。
2.2 NoSQL 應用情況介紹
國內的網際網路蓬勃發展,不僅湧現出 BAT(百度,阿里巴巴,騰訊)之類的巨頭,也帶動了整個互聯 網行業的發展,大量的創業型公司如春筍般的湧出,在國家層面也提出了“網際網路+”和“萬眾創業”的口 號。更多傳統的行業也開始擁抱網際網路。但是無論是做所謂的生態平臺還是 傳統業務的轉型,涉及到的業 務是多種多樣的。這個時候企業架構師對於應用系統的核心——資料庫管理 不僅有傳統的 SQL 選項也有了 NoSQL 這種適合特定場景需求的選項。
NoSQL 資料庫在以下的這幾種情況下比較適用:
1、資料模型比較簡單;
2、需要靈活性更強的 IT 系統; 3、對資料庫效能要求較高; 4、不需要高度的資料一致性;
5、對於給定 key,比較容易映射覆雜值的環境。
2.3 NoSQL 發展現狀
國外: Google 的 BigTable 和 Amazon 的 Dynamo 使用的就是 NoSQL 型資料庫。
國內:百度、阿里、騰訊、新浪微博、視覺中國、優酷運營資料分析、飛信空間、豆瓣社群等..
3、 什麼時候建議使用 NoSql
1、對資料庫高併發讀寫的需求 2、對海量資料的高效率儲存和訪問的需求 3、對資料庫的高可擴充套件性和高可用性的需求
4、 NoSql 和傳統資料庫簡單對比。 非結構型資料庫。沒有行、列的概念。用 JSON 來儲存資料。
5、 集合就相當於“表 ”,文件就相當於“行”。
 
 ****** MongoDb 介紹
MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像 關係資料庫的。他支援的資料結構非常鬆散,是類似 json 的 bson 格式,因此可以儲存比較複雜的資料類 型。Mongo 最大的特點是他支援的查詢語言非常強大,其語法有點類似於面向物件的查詢語言,幾乎可以 實現類似關係資料庫單表查詢的絕大部分功能,而且還支援對資料建立索引。它的特點是高 效能 、易部署 、 易使用 ,儲存資料非常 方便 。

手冊:https://docs.mongodb.org/manual/ 注意:部分 win7 系統需要安裝補丁,KB2731284。 1. 雙擊 MongoDB 軟體下一步下一步安裝;

************windows下配置環境變數***

安裝完成配置環境變數 C:\Program Files\MongoDB\Server\3.0\bin 加入到系統的path 環境變數中

開啟 cmd 輸入 :mongo命令看看是否成功。如果出現版本資訊說明 mongodb配置成功。


*************使用 MongoDb


使用mogodb前需要到官網下載mongodb;

1. 新建一個存放資料庫的資料夾,注意:不能有中文和空格,建議不要放在 

2.服務端開啟資料庫服務

mongod --dbpath C:\mongodb

--dbpath 就是選擇資料庫文件所在的資料夾,就是剛才第一步建立的資料夾

也就是說,mongoDB 中,真的有物理檔案,對應一個個資料庫。盤可以拷走。 注意:一定要保持,開機這個 CMD 不能動了,不能關,不能 ctrl+c。 一旦這個 cmd 有問題了,資料庫就自動關閉了。

3.客戶端輸入 mongo 命令連線服務端;

mongo 資料庫名

或者:mongo 資料庫的ip地址:埠號

清屏:cls

檢視所有資料庫列 表:show dbs

二、 建立資料庫

在使用資料庫前要執行(use 資料庫名)命令;

使用資料庫、建立 

資料庫:use student;如果真的想把這個資料庫建立成功,那麼必須插入一個數據。 資料庫中不能直接插入資料,只能往集合(collectio ns)中插入數 據。不需要專門建立集合,只需要寫點語法插入資料就會建立集合:

db.student.insert({name:x iaom ing});

db.student 系統發現 student 是一個陌生的集合名字,所以就自動建立了集合。 顯示當前的資料集合(mysql 中叫表)

show collections


刪除資料庫,刪除當前所在的資料庫

db.dropDatabase();


刪除集合,刪除指定的集合 刪除表

刪除集合 db.COLLECTION_NAME.drop()

 db.user.drop()


三、 插入(增加)資料
插入資料,隨著資料的插入,資料庫建立成功了,集合也建立成功了。

db.表名.insert({"name":"zhangsan"});


四、 查詢資料
1、查詢所有記 錄
db.userInfo.find();
相當於:select* from userInfo;
2、查詢去掉後 的當前聚集集合中的某列的重複資料

db.userInfo.di stinct("name");會過濾掉 name 中的相同資料

相當於:select distict name from userInfo;

3、查詢 age = 22 的記錄

db.userInfo.find({"age": 22});
相當於: select * from userInfo where age = 22;

4、查詢 age > 22 的記錄db.userInfo.find({age: {$gt: 22}});

相當於:select * from userInfo where age >22;

5、查詢 age < 22 的記錄

db.userInfo.find({age: {$lt: 22}});

相當於:select * from userInfo where age <22;6、查詢 age >= 25 的記錄

db.userInfo.find({age: {$gte: 25}});相當於:select * from userInfo where age >= 25;

7、查詢 age <= 25 的記錄db.userInfo.find({age: {$lte: 25}});

8、查詢 age >= 23 並且 age <= 26db.userInfo.find({age: {$gte: 23, $lte: 26}});

9、查詢name中包含 mongo的資料db.userInfo.find({name: /mongo/});

//相當於%%
select * from userInfo where name lik
e ‘%mongo%’;

10、查詢 name 中以 mongo 開頭的db.userInfo.find({name: /^mongo/});
select * from userInfo where name like ‘mongo%’;

11、查詢指定列 nameage 資料

db.userInfo.find({}, {name: 1, age: 1});

相當於:select name, age from userInfo;

當然 name 也可以用 true 或 false,當用 ture 的情況下河 name:1 效果一樣,如果用 false 就 是排除 name,顯示 name 以外的列資訊。

12、查詢指定列 nameage 資料, age > 25db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});相當於:select name, age from userInfo where age >25;13、按照年齡排序 升序 -1 降序 升序:db.userInfo.find().sort({age: 1});降序:db.userInfo.find().sort({age: -1});

14、查詢 name = zhangsan, age = 22 的資料
db.userInfo.find({name: 'zhangsan', age: 22});
相當於:select * from userInfo where name = zhangsan’ and age = 22;

15、查詢前 條資料db.userInfo.find().limit(5 );相當於:selecttop 5 * from userInfo;

16、查詢 10 條以後的資料
db. userI nfo. fin d(). sk ip(10 );
相當於:select * from userInfo where id not in ( selecttop 10 * from userInfo
);

17、查詢在 5-10 之間的資料
db. userI nfo. fin d(). limit (1 0). ski p(5);
可用於分頁,limit 是 pageSizeskip 是第幾頁*pageSize

18or與 查詢
db.userInfo.find({$or: [{age: 22}, {age: 25}]});相當於:select * from userInfo where age = 22 or age = 25;19findOne 查詢第一條資料
db. userI nfo. fin dOne( );
相當於:selecttop 1 * from userInfo; db.userInfo.find().limit(1 );

20、查詢某 個結果集的記錄條數 統計數量

db.userInfo.find({age: {$gte: 25}}).count();相當於:select count(*) from userInfo where age >= 20;

如果要返回限制之後的記錄數量,要使用 count(true)或者 count(非 0) db.users.find().skip(1 0).limit(5).count(true);

四、修改資料

修改裡面還有查詢條件。你要該誰,要告訴 mongo。 查詢名字叫做小明的,把年齡更改為 16 歲:

db.student.update({"name":"小明"},{$set:{"ag e":16}});

查詢數學成績是 70,把年齡更改為 33 歲:

db.student.update({"sc ore.shuxue":70},{$set:{"ag e":33}});

更改所有匹配專案:"
By default, the update() method updates a single document. To update multiple documents, use the multi option in the update() method.

db.student.update({"sex":""},{$set:{"age":33}},{multi: true});


完整替換,不出現$set 關鍵字了注意

db.student.update({"name":"小明"},{"name":"大明","age":16});


db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);

相當於:update users set age = age + 50 where name = Lisi;

db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);

相當於:update users set age = age + 50, name = hoho’ where name = Lisi;

五、 刪除資料

//刪除age=132的這條資料

db.users.remove({age: 132});

db.collectionsNames.remove( { "borough": "Manhattan" } )

//如果存在兩個"borough": "Queens",加上後面的條件,就只刪除其中一條

db.restaurants.remove( { "borough": "Queens" }, { justOne: true } )

如果刪除了資料庫中的所有表,name資料庫頁被刪除了;

----MongoDB 索引 和 explain 的使用---

一、索引基礎
索引是對資料庫表中一列或多列的值進行排序的一種結構,可以讓我們查詢資料庫變得 更快。MongoDB 的索引幾乎與傳統的關係型資料庫一模一樣,這其中也包括一些基本的查 詢優化技巧。

下面是建立索引的 命令:

db.user.ensureIndex( {"username":1})

獲取當前集合的索 引:  
db.user.getIndexes()
刪除索引的命令是 :  
db.user.dropIndex( {"username":1})

在 MongoDB 中,我們同樣可以建立複合索引,如:
數字 1 表示 username 鍵的索引按升序儲存,-1 表示 age 鍵的索引按照降序方式儲存。db.user.ensureIndex({"username":1, "age":-1})
該索引被建立後,基於 username 和 age 的查詢將會用到該索引,或者是基於 username 的查詢也會用到該索引,但是隻是基於 age 的查詢將不會用到該複合索引。因此可以說,
 如果想用到複合索引,必須在查詢條件中包含複合索引中的前 N 個索引列。然而如果查詢 條件中的鍵值順序和複合索引中的建立順序不一致的話,MongoDB 可以智慧的幫助我們調 整該順序,
 以便使複合索引可以為查詢所用。如:  
db.user.find({"age": 30, "username": "stephen"})
對於上面示例中的查詢條件,MongoDB 在檢索之前將會動態的調整查詢條件文件的順 序,以使該查詢可以用到剛剛建立的複合索引。
對於上面建立的索引,MongoDB 都會根據索引的 keyname 和索引方向為新建立的索引 自動分配一個索引名,下面的命令可以在建立索引時為其指定索引名,如
db.user.ensureIndex( {"username":1},{"name":"userindex"})
隨著集合的增長,需要針對查詢中大量的排序做索引。如果沒有對索引的鍵呼叫 sort, MongoDB 需要將所有資料提取到記憶體並排序。因此在做無索引排序時,
如果資料量過大以 致無法在記憶體中進行排序,此時 MongoDB 將會報錯。

二、唯一索引

在預設情況下建立的索引均不是唯一索引。下面的示例將建立唯一索引,如:
db.user.ensureIndex( {"useri d":1},{"uniq ue":true})
如果再次插入 userid 重複的文件時,MongoDB 將報錯,以提示插入重複鍵,如:
db.user.insert({"userid":5}) 
db.user.insert({"userid":5})
E11000 duplicate key error index: user.user.$userid_1 dup key: { : 5.0 }
如果插入的文件中不包含 userid 鍵,那麼該文件中該鍵的值為 null,如果多次插入類似 的文件,MongoDB 將會報出同樣的錯誤,如:
db.user.insert({"userid1":5}) 
db.user.insert({"userid1":5})
E11000 duplicate key error index: user.user.$userid_1 dup key: { : null }
如果在建立唯一索引時已經存在了重複項,我們可以通過下面的命令幫助我們在建立唯 一索引時消除重複文件,僅保留髮現的第一個文件,如:
先刪除剛剛建立的唯一索引。
db. user. dropI ndex( {" userid" :1} )
插入測試資料,以保證集合中有重複鍵存在。
db.user.remove() 
db.user.insert({"userid":5})
db.user.insert({"userid":5})
重新建立唯一索引
db.user.ensureIndex({"userid":1},{"unique":true })
我們同樣可以建立 複合唯一索引,即保證複合鍵值唯一 即可。如:
db.user.ensureIndex( {"useri d":1,"age":1},{"unique":true})


四、使用 explain

explain 是非常有用的工具,會幫助你獲得查詢方面諸多有用的資訊。只要對遊標呼叫 該方法,就可以得到查詢細節。explain 會返回一個文件,而不是遊標本身;

explain 會返回查詢使用的索引情況,耗時和掃描文件數的統計資訊。


五、explain executionStats 查詢具體的執行 時間

db.tablename.find().explain( "executionStats" )

關注輸出的如下數值:explain.executionStats.executionTimeMillis

**************nodejs操作mongodb***************

  需要引包: 

npm install mongodb --save-dev    或者     cnpm install mongodb --save-dev

******連線資料庫******

/*
*nodejs使用ongodb的
*/
var router = function(app){
  var fs =require('fs');
  var http=require('https');
  var mysql=require('mysql');//呼叫mysql模組
  var request = require('request');
  var url = require('url');
  var querystring = require('querystring');
  var bodyParser     =         require("body-parser");
  var urlencodedParser = bodyParser.urlencoded({ extended: false })
  app.get('/get',function (req, res) {

// app.post('/one',urlencodedParser,function (req, res) {

/***text/html,application/json", @"text/json", @"text/javascript",
*@"text/html",@"text/xml", @"text/plain; charset=utf-8",image/png
*/
// res.writeHeader(200, {'Content-Type':'image/png;charset=UTF-8'});
res.writeHeader(200, {'Content-Type':'text/html;charset=UTF-8'});
// res.writeHeader(200, {'Content-Type':'application/json;charset=UTF-8'});

// //************建立資料庫連線
//  /*要在 MongoDB 中建立一個數據庫,首先我們需要建立一個 MongoClient 物件,然後配置好指定的 URL 和 埠號。
// // 如果資料庫不存在,MongoDB 將建立資料庫並建立連線。*/
// // var MongoClient = require('mongodb').MongoClient;
// // var url = "mongodb://localhost:27017/userInfo";
// // MongoClient.connect(url, function(err, db) {
// //   if (err) throw err;
// //   console.log("資料庫已建立!");
// //   res.end("資料庫建立成功");
// //   db.close();
// // });



//********** 建立集合
var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://localhost:27017/userInfo';
MongoClient.connect(url, function (err, db) {
    if (err) throw err;
    console.log('資料庫已建立');
    var dbase = db.db("userInfo");
    dbase.createCollection('product', function (err, res) {
        if (err) throw err;
        console.log("建立product集合成功!");
        db.close();
    });
});





//**************插入單條資料
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/userInfo";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    var myobj = { name: "lambo001", url: "www.aichi010.com" };
    dbo.collection("user").insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log("插入成功");
        db.close();
    });
});

 //***********插入多條資料
 var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    var myobj =  [
        { name: 'lambo002', url: 'lambo', type: 'cn'},
        { name: 'lambo003', url: 'lambo', type: 'en'},
        { name: 'lambo004', url: 'lambo', type: 'en'}
       ];
    dbo.collection("user").insertMany(myobj, function(err, res) {
        if (err) throw err;
        console.log("插入的文件數量為: " + res.insertedCount);//res.insertedCount 為插入的條數
        db.close();
    });
});

//*********更新一條資料
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    var whereStr = {"name":'lambo'};  // 查詢條件
    var updateStr = {$set: { "url" : "lambo新" }};//更新後的值
    dbo.collection("user").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("更新成功");
        db.close();
    });
});


//********更新多條資料

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    var whereStr = {"type":'en'};  // 查詢條件
    var updateStr = {$set: { "url" : "更新多條資料" }};
    dbo.collection("user").updateMany(whereStr, updateStr, function(err, res) {
        if (err) throw err;
         console.log(res.result.nModified + " 條文件被更新");//result.nModified 為更新的條數。
        db.close();
    });
});


//**********刪除一條資料
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    var whereStr = {"name":'lambo'};  // 查詢條件
    dbo.collection("user").deleteOne(whereStr, function(err, obj) {
        if (err) throw err;
        console.log("刪除成功");
        db.close();
    });
});


//***********刪除多條資料
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    var whereStr = { type: "en" };  // 查詢條件
    dbo.collection("user").deleteMany(whereStr, function(err, obj) {
        if (err) throw err;
        console.log(obj.result.n + " 條文件被刪除");//obj.result.n 刪除的條數。
        db.close();
    });
});


//***************查詢資料
// 可以使用 find() 來查詢資料, find() 可以返回匹配條件的所有資料。 如果未指定條件,find() 返回集合中的所有資料。
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    dbo.collection("user"). find({}).toArray(function(err, result) { // 返回集合中所有資料
        if (err) throw err;
        console.log(result);
        db.close();
    });
});


//*********查詢指定條件的資料
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
     var whereStr = {"name":'lambo002'};  // 查詢條件
    dbo.collection("user").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});



//**********排序


// 排序 使用 sort() 方法,該方法接受一個引數,規定是升序(1)還是降序(-1)。
// 例如:
// { type: 1 }  // 按 type 欄位升序
// { type: -1 } // 按 type 欄位降序
// 按 type 升序排列:

var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    var mysort = { type: 1 };
    dbo.collection("user").find().sort(mysort).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});


//*************查詢分頁
// 如果要設定指定的返回條數可以使用 limit() 方法,該方法只接受一個引數,指定了返回的條數。
// limit():讀取兩條資料
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    dbo.collection("user").find().limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });
});


//********如果要指定跳過的條數,可以使用 skip() 方法。
// skip(): 跳過前面兩條資料,讀取兩條資料
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    dbo.collection("user").find().skip(2).limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });
});


// 連線操作
// mongoDB 不是一個關係型資料庫,但我們可以使用 $lookup 來實現左連線。
// 例如我們有兩個集合資料分別為:
// 集合1:orders
// [
//   { _id: 1, product_id: 154, status: 1 }
// ]
// 集合2:products
// [
//   { _id: 154, name: '膝上型電腦' },
//   { _id: 155, name: '耳機' },
//   { _id: 156, name: '臺式電腦' }
// ]
// $lookup 實現左連線
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://127.0.0.1:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    dbo.collection('orders').aggregate([
        { $lookup:
            {
                from: 'products',           // 右集合
                localField: 'product_id',   // 左集合 join欄位
                foreignField: '_id',        // 右集合 join欄位
                as: 'orderdetails'          // 新生成欄位(型別array)
            }
        }
    ], function(err, res) {
    if (err) throw err;
    console.log(JSON.stringify(res));
    db.close();
});


//**********刪除集合
// 我們可以使用 drop() 方法來刪除集合:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";

MongoClient.connect(url, function(err, db) {
    if (err) throw err;
    var dbo = db.db("userInfo");
    // 刪除 test 集合
    dbo.collection("user").drop(function(err, delOK) {  // 執行成功 delOK 返回 true,否則返回 false
        if (err) throw err;
        if (delOK) console.log("集合已刪除");
        db.close();
    });
});





});

}
exports.router = router;




****mongodb的封裝***

var MongoClient=require('mongodb').MongoClient;


var DbUrl='mongodb://localhost:27017/productmanage';  /*連線資料庫*/


var ObjectID = require('mongodb').ObjectID;//用自增長_id去資料庫中查詢資料,必須要用new ObjectID(_id),要不然在資料庫中查不到

function  __connectDb(callback){ MongoClient.connect(DbUrl,function(err,db){
        if(err){

            console.log('資料庫連線失敗');
            return;
        }
        //增加 修改 刪除
          callback(db);

    })
}


//暴露 ObjectID
exports.ObjectID=ObjectID;

//資料庫查詢
/*
 Db.find('user',{},function(err,data){
    data資料
})


 */
exports.find=function(collectionname,json,callback){
    __connectDb(function(db){
        var result=db.collection(collectionname).find(json);
   result.toArray(function(error,data){
            db.close();/*關閉資料庫連線*/
            callback(error,data);/*拿到資料執行回撥函式*/
        })
    })
}


//增加資料
exports.insert=function(collectionname,json,callback){
    __connectDb(function(db){
   db.collection(collectionname).insertOne(json,function(error,data){
            callback(error,data);
        })
    })
}


//增加資料
exports.update=function(collectionname,json1,json2,callback){
    __connectDb(function(db){
        db.collection(collectionname).updateOne(json1,{$set:json2},function(error,data){


            callback(error,data);
        })
    })
}


//刪除資料
exports.deleteOne=function(collectionname,json,callback){
    __connectDb(function(db){
        db.collection(collectionname).deleteOne(json,function(error,data){
            callback(error,data);
        })
    })
}

*******************************MAC 上使用mogodb************************

安裝mongodb方法一:官網直接下載;

方法二:原理上就是直接下載,終端命令吧。

1,下載
curl -O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.2.1.tgz  
2,解壓
tar -zxvf mongodb-osx-x86_64-3.2.1.tgz  
3,複製解壓之後的資料夾去mongodb run的目錄
mkdir -p mongodb  
cp -R -n mongodb-osx-x86_64-3.2.1/ mongodb  
4,下一步就是配置了,確保二進位制檔案的位置在路徑變數中,md的二進位制檔案都在bin/裡面,

export PATH=<mongodb-install-directory>/bin:$PATH  


--------配置資料儲存路徑和log日誌

在/usr/local/mongodb/bin下就是mongodb的執行檔案了
. 然後在根目錄下新建 data 資料夾,裡面再建一個db資料夾,就是上圖中那個 usr資料夾上面的 那個data資料夾 ,裡面是用來存放資料庫的,
. 終端切換到/usr/local/mongodb/bin目錄下,
執行 ./mongod  啟動mongodb服務;

. 顯示等候客戶端連線的介面就代表啟動成功了(

2018-06-12T16:31:09.885+0800 I NETWORK  [initandlisten] waiting for connections on port 27017

),如果不成功就檢查下你/data/db資料夾位置對不對,不行就重新刪掉建一個,
 開啟瀏覽器,輸入localhost:27017,會出現“It looks like you are trying to access MongoDB over HTTP on the native driver port.” 這樣一行文字
注意:

exception in initAndListen: NonExistentPath: Data directory /data/db not found., terminating

解決方案

方案一、自己建立一個數據庫路徑

方案二、自己在別處建立一個數據庫路徑,比更改mongoDB資料庫路徑

如:mongod --dbpath ~/Documents/mongo/db

在Document目錄下建立mongo/db資料夾即可

比如在桌面建立一個mongodb資料夾,用來存放mongodb的資料;

.服務端開啟資料庫服務——————在終端輸入sudo ./mongod --dbpath /Users/wofu/Desktop/mongodb 

以後每次啟動就用上面這個帶路徑的命令;


****執行 MongoDB,利用系統預設的儲存目錄
1、首先我們建立一個數據庫儲存目錄 /data/db:
sudo mkdir -p /data/db
啟動 mongodb,預設資料庫目錄即為 /data/db:
sudo mongod


# 如果沒有建立全域性路徑 PATH(配置環境變數),需要進入以下目錄
cd /usr/local/mongodb/bin
sudo ./mongod
再開啟一個終端進入執行以下命令:
$ cd /usr/local/mongodb/bin 
$ ./mongo
出現:MongoDB shell version v3.4.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.2
Welcome to the MongoDB shell.


注意:如果你的資料庫目錄不是/data/db,可以通過 --dbpath 來指定。


,我們可以把 MongoDB 的二進位制命令檔案目錄(安裝目錄/bin)新增到 PATH 路徑中:

export PATH=/usr/local/mongodb/bin:$PATH

-------配置資料儲存路徑和og日誌

cd 到  /usr/local/mongodb/bin
vim mongodb.conf

****mongod.conf中的內容:

#mongodb config file

dbpath=/Users/wofu/Desktop/mongodb

logpath=/Users/wofu/Desktop/mongod.log

logappend = true

port = 27017

fork = true

auth = true

port: 資料庫服務使用埠 
dbpath: 資料存放的檔案位置 
logpath: 日誌檔案的存放位置 

fork: 後臺守護程序執行

:wq儲存退出;


***客戶端輸入 mongo 命令連線服務端

mongo 資料庫名

或者:mongo 資料庫的ip地址:埠號

如果是本地資料庫可以使用:./mongo

清屏:cls

檢視所有資料庫列 表:show dbs


兩個相關的基本概念:

相關推薦

nodejs操作資料庫mongodb

-------mongodb------------使用:http://www.runoob.com/mongodb/mongodb-osx-install.html********** 資料庫和檔案的主要區別1、 資料庫有資料庫表、行和列的概念,讓我們儲存操作資料更方便2、

nodejs操作mongodb資料庫封裝DB類

我使用到了nodejs的外掛mongoose,用mongoose操作mongodb其實蠻方便的。 關於mongoose的安裝就是 npm install -g mongoose 這個DB類的資料庫配置是基於auth認證的,如果您的資料庫沒有賬號與密碼則留空即可。 /** * mon

nodejs操作mongodb資料庫(mongoose)

準備 在上一篇的基礎上,通過npm安裝mongoose。 關於mongoose Mongoose是MongoDB的一個物件模型工具,是基於node-mongodb-native開發的MongoDB nodejs驅動,可以在非同步的環境下執行。同時它也是

nodejs操作mongodb資料庫mongodb

準備 通過npm命令安裝mongodb 安裝mongodb資料庫,這裡不詳細介紹了,網上一堆 關於版本 [email protected] nodejs v4.6.0 MongoDB資料庫 3.2版本 CRUD操作 在此之前應對M

Nodejs操作MongoDB資料庫示例

//mongodb_demo.js /** cnpm install mongodb */ var MongoClient = require('mongodb').MongoClient;

Nodejs操作MongoDB資料庫增刪改查及效能測試

1.Node.js操作MongoDB資料的步驟 安裝MongoDB mkdir koaMongodb cd koaMongodb npm init npm install mongodb --save 引入MongoDB下面的MongoDBClient var M

nodejs操作mongodb資料庫

又從頭捋了一遍這個案例,迷迷糊糊終於開點竅了,雖然寫的很簡單,也很low,但是剛起步,再接再厲。 第一步:安裝node環境,配置全域性變數。 第二步:安裝mongodb,也有一些視覺化工具,喜歡命令列操作的也可以不用,我沒用也就不介紹了。 第三步:新建一個目錄存放資料  隨

nodejs操作mongodb數據庫(mongodb

title upd water ext require sel fill 存儲過程 ams 1.增加 var MongoClient = require("mongodb").MongoClient; var DB_URL = "mongodb://localhost:27

Nodejs操作Mongodb數據庫

ole ndb rem 分類 sta install png 操作 done nodejs是一門很強大的語言,覺得和node想聯系的數據庫 我還是喜歡MonGodb ,下面就介紹如何操作: 1.官網下載mongodb,然後傻瓜式一鍵安裝 2.在安裝mongo

Python資料庫MongoDB操作

前言 最近這幾天準備介紹一下 Python 與三大資料庫的使用,這是第一篇,首先來介紹 MongoDB 吧,,走起!! MongoDB GUI 工具 首先介紹一款 MongoDB 的 GUI 工具 Robo 3T,初學 MongoDB 用這個來檢視資料真的很爽。可以即時看到資料的增

封裝nodejs操作sqlite資料庫的模組

// import node modules package const fs = require('fs'); const path = require('path') const sqlite3 = require("sqlite3").verbose(); //import ow

nodejs操作oracle資料庫簡單封裝-node-oracledb模組

一 安裝模組 npm install oracledb 官方文件:https://www.npmjs.com/package/oracledb 二 安裝免費的Oracle Instant Client ZIP 如果資料庫位於遠端計算機上,請執行以下步驟。其他條件請見

nodejs操作sqlserver資料庫簡單封裝-node-mssql模組

一 安裝node-mssql模組 npm install node-mssql 官方文件:https://www.npmjs.com/package/node-mssql 二 封裝連線資料庫程式碼 db.js: var node_mssql = require(

nodejs操作sqlserver資料庫簡單封裝-mssql模組

注意:開啟sqlserver伺服器允許遠端連線的步驟,自行百度,很多經驗,nodejs連線sqlserver,最好把防火牆的入站規則關閉,或者允許入站.這個封裝只是sql語句查詢,看懂這個,其他的可以自行擴充套件,支援連線池. 一 安裝mssql模組 npm install mssql

nodejs漸入佳境[17]-mongodb資料庫入門

下載mongodb https://www.mongodb.com mongod 解壓,進入bin目錄 12 //-dbpath代表資料放置在哪裡./mongod -dbpath /Users/jackson/Downloads/mongodb-data

效能測試工具操作資料庫(九)-Loadrunner與MongoDB

1、在loadrunner中新建指令碼(本文以LoadRunner11為例),要求選擇協議型別為Java->Java Vuser 2、在Run-time Settings設定JDK路徑,由於LoadRunner11不支援jdk1.8,本次測試是拷貝了一份低版本的JDK1.6,所以路徑選擇固

nodeJs 操作Mysql資料庫

nodeJs下操作資料庫需要安裝npm模組: mysql npm install mysql --save-dev 新建express專案 express --view=ejs 在專案根目錄下新建資料庫配置檔案 const config = { host : '

MongoDB操作資料庫

1、開啟資料庫  mongo 2、建立資料庫並進入例項  use user 3、檢視所有資料庫例項  show dbs 4、檢視當前資料庫例項  db  顯示user 5、插入資料:db.users.insert({"name":"cd","pwd":

NodeJs】連線mongodb資料庫成功之後報db.collection is not a function錯誤

在nodejs操作mongodb顯示資料庫連線成功之後突然報了db.collection is not a function錯誤 nodejs程式碼如下: /** * Created by lenovoo on 2018/1/23. */ var express = requ

MongoDB使用Java操作資料庫案例

一、pom.xml依賴 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId>