項目實戰(連載):基於Angular2+Mongodb+Node技術實現的多用戶博客系統教程(3)

本章主要講什麼(一句話)?


 

1、前言


 

上一小節咱們先簡單的介紹MongoDB的一些入門的內容,主要包括MongoDB的下載、安裝、配置及MongoDB簡單的建庫,刪庫,查詢文檔等基本功能,本篇咱們將繼續《基於MongoDB的MyBlog數據庫設計篇》--高級篇,在此部份內容裏將會涉及到如下內容:node

一、MongoDB的的增、刪、改、查語法及示例正則表達式

二、Node與MongoDB的互操做部分sql

2、內容

2.一、MongoDB支持的數據類型

MongoDB支持許多數據類型的列表下面給出:mongodb

String : 這是最經常使用的數據類型來存儲數據。在MongoDB中的字符串必須是有效的UTF-8。數據庫

Integer : 這種類型是用來存儲一個數值。整數能夠是32位或64位,這取決於您的服務器。express

Boolean : 此類型用於存儲一個布爾值 (true/ false) 。npm

Double : 這種類型是用來存儲浮點值。數組

Min/ Max keys : 這種類型被用來對BSON元素的最低和最高值比較。服務器

Arrays : 使用此類型的數組或列表或多個值存儲到一個鍵。框架

Timestamp : 時間戳。這能夠方便記錄時的文件已被修改或添加。

Object : 此數據類型用於嵌入式的文件。

Null : 這種類型是用來存儲一個Null值。

Symbol : 此數據類型用於字符串相同,但它一般是保留給特定符號類型的語言使用。

Date : 此數據類型用於存儲當前日期或時間的UNIX時間格式。能夠指定本身的日期和時間,日期和年,月,日到建立對象。

Object ID : 此數據類型用於存儲文檔的ID。

Binary data : 此數據類型用於存儲二進制數據。

Code : 此數據類型用於存儲到文檔中的JavaScript代碼。

Regular expression : 此數據類型用於存儲正則表達式

2.二、MongoDB 插入文檔

insert() 方法

要插入數據到 MongoDB 集合,須要使用 MongoDB 的 insert() 或 save() 方法。

語法

insert() 命令的基本語法以下:

>db.COLLECTION_NAME.insert(document)

例子

title: 'MongoDB Overview',

description: 'MongoDB is no sql database',

by: 'tutorials fwytech',

tags: ['mongodb', 'database', 'NoSQL'],

likes: 100

})

這裏 mycol 是集合的名稱,如前面的教程中建立。若是集合在數據庫中不存在,那麼MongoDB 將建立此集合,而後把它插入文檔。插入文檔中,若是咱們不指定_id參數,而後MongoDB 本文檔分配一個獨特的ObjectId。

要插入單個查詢的多個文檔,能夠傳遞一個數組 insert() 命令的文件。

示例

{

title: 'MongoDB Overview',

description: 'MongoDB is no sql database',

by: 'tutorials fwytech',

tags: ['mongodb', 'database', 'NoSQL'],

likes: 100

},

{

title: 'NoSQL Database',

description: 'NoSQL database doesn't have tables',

by: 'tutorials fwytech',

tags: ['mongodb', 'database', 'NoSQL'],

likes: 20,

comments: [

{

user:'user1',

message: 'My first comment',

dateCreated: new Date(2013,11,10,2,35),

like: 0

}

]

}

])

2.三、MongoDB 更新文檔

MongoDB的 update() 和 save() 方法用於更新文檔的集合。 update()方法更新現有的文檔值,而替換現有的文檔經過的文件中 save() 方法。

MongoDB Update() 方法

update()方法更新現有文檔值。

語法:

update() 方法的基本語法以下

>db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)

例子

考慮如下數據mycol集合。

下面的例子將設置新標題'MongoDB Overview'的文件,更新其標題是「New MongoDB Tutorial」

MongoDB默認將只更新單一的文件,來更新多個你須要設置參數置'multi' 爲true

Tutorial'}},)

MongoDB Save() 方法

save() 方法替換現有的文檔和經過新的文檔 save() 方法

語法

MongoDB 的 save() 方法的基本語法以下:

>db.COLLECTION_NAME.save()

例子

{

}

)

2.四、MongoDB 刪除文檔

remove() 方法

MongoDB的 remove() 方法用於從集合中刪除文檔。remove() 方法接受兩個參數。第一個是刪除criteria ,第二是justOne標誌:

deletion criteria :(可選)刪除標準,根據文件將被刪除。

justOne : (可選)若是設置爲true或1,而後只刪除一個文件。

語法:

基本語法remove()方法以下

>db.COLLECTION_NAME.remove(DELLETION_CRITTERIA)

例子

考慮如下數據mycol集合。

下面的例子將刪除全部的文件,其標題是 'MongoDB Overview'

刪除只有一個

若是有多個記錄且要刪除的只有第一條記錄,那麼設置remove()方法中justOne參數

>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)

例子:

先增長兩條記錄:

再刪除:

發現只有第一條刪除了

若是不加第2個參數1,則兩條記錄都會被刪除!

刪除全部文件

若是不指定刪除條件,而後MongoDB將從集合中刪除整個文件。這至關於SQL的truncate命令。

2.五、MongoDB 查詢文檔

find() 方法

要從MongoDB 查詢集合數據,須要使用MongoDB 的 find() 方法。

語法

基本的find()方法語法以下

>db.COLLECTION_NAME.find()

find() 方法將在非結構化的方式顯示全部的文件。

pretty() 方法

結果顯示在一個格式化的方式,可使用 pretty() 方法.

語法:

例子

{

"title": "MongoDB Overview",

"description": "MongoDB is no sql database",

"by": "tutorials fwytech",

"tags": ["mongodb", "database", "NoSQL"],

"likes": "100"

}

除了find() 方法外,還有一個 findOne() 法,返回一個文件。

RDBMS Where子句和MongoDB等同語句

要查詢文件的一些條件的基礎上,可使用下面的操做


 

AND 在MongoDB中用法

語法:

在 find() 方法,若是經過多個鍵分離',',那麼 MongoDB 處理 AND 條件。AND 基本語法以下所示:

例子

下面給出的例子將顯示全部的教程,標題是「MongoDB Overview「

{

"_id": ObjectId(7df78ad8902c),

"title": "MongoDB Overview",

"description": "MongoDB is no sql database",

"by": "fwytech",

"tags": ["mongodb", "database", "NoSQL"],

"likes": "100"

}

對於上面給出的例子至關於where子句 ' where by='fwytech' AND title='MongoDB Overview' , 能夠經過任意數量的鍵值對在 find 子句。

MongoDB中OR

語法:

OR條件的基礎上要查詢文件,須要使用$or關鍵字。OR 基本語法以下所示:

{

$or: [

,

]

}

).pretty()

例子

下面給出的例子將顯示全部的教程,由'fwytech' 所寫或標題是MongoDB Overview

{

"_id": ObjectId(7df78ad8902c),

"title": "MongoDB Overview",

"description": "MongoDB is no sql database",

"by": "fwytech",

"tags": ["mongodb", "database", "NoSQL"],

"likes": "100"

}

AND 和 OR 一塊兒使用

例子

下面給出的例子將顯示有像的文件大於100,其標題是「MongoDB Overview'或者是'fwytech' 。等效於 SQL where子句 爲 'where likes>10 AND (by = 'fwytech' OR title = 'MongoDB Overview')'

{

"_id": ObjectId(7df78ad8902c),

"title": "MongoDB Overview",

"description": "MongoDB is no sql database",

"by": "fwytech",

"tags": ["mongodb", "database", "NoSQL"],

"likes": "100"

}

2.六、MongoDB Limit/限制記錄

Limit() 方法

要限制 MongoDB 中的記錄,須要使用 limit() 方法。 limit() 方法接受一個數字型的參數,這是要顯示的文檔數。

語法:

limit() 方法的基本語法以下

>db.COLLECTION_NAME.find().limit(NUMBER)

示例

考慮集合myycol具備如下的數據

{ "title":"a",」clicks」:1}

{ "title":"b",」clicks」:2}

{ "title":"c",」clicks」:3}

下面的例子將顯示只有2個文檔,當執行文檔查詢。

{ "title":"a",」clicks」:1}

{ "title":"b",」clicks」:2}

若是不指定數量 limit() 方法的參數,它會顯示從集合中的全部文件。

MongoDB Skip() 方法

除了limit() 方法,還有一個方法skip() 也接受數字類型的參數,並使用跳過的文檔數。

語法:

skip()方法基本語法以下

>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

示例:

下面的例子將只顯示第二個文檔。

{ "title":"b",」clicks」:2}

請注意,skip()方法的默認值是0

2.七、Node中操做MongoDB

PS:

前提-1:已經安裝node

前提-2:已經安裝mongodb

前提-3:項目中安裝了mongodb模塊

前提-4:Mongodb服務器已經開啓監聽

命令以下:cnpm install mongodb

2.7.一、鏈接數據庫

var mongo=require("mongodb");

var host="localhost";

var port="27017";

var server=new mongo.Server(host,port,);//建立數據庫所在的服務器服務器

var db=new mongo.Db("node-mongodb ",server,);//建立數據庫對象

db.open(function (err,db) {//鏈接數據庫

if(err)

throw err;

else{

console.log("成功創建數據庫鏈接");

db.close();

}

});

db.on("close", function (err,db) {//關閉數據庫

if(err) throw err;

else console.log("成功關閉數據庫.");

});

PS:關閉數據庫db.close([forceClose],[callback]);

forceClose爲true時,強制關閉該數據庫,當數據庫關閉後,不可再使用open開啓數據庫.forceClose爲false時,不強制關閉數據庫,當數據庫關閉後,能夠再使用open打開.

2.7.二、插入數據

插入數據後,在控制檯中輸出數據文檔的內容

var mongo=require("mongodb");

var host="localhost";

var port="27017";

var server=new mongo.Server(host,port,);//建立數據庫所在的服務器服務器

var db=new mongo.Db("node-mongodb",server,);//建立數據庫對象

db.open(function (err,db) {//鏈接數據庫

if(err)

throw err;

else{

db.collection("employees", function (err,collection) {

collection.insert(, function (err,docs) {

console.log(docs);

db.close();

});

});

}

});

db.on("close", function (err,db) {//關閉數據庫

if(err) throw err;

else console.log("成功關閉數據庫.");

});

2.7.三、讀取數據

var mongo=require("mongodb");

var host="localhost";

var port="27017" ;

var server=mongo.Server(host,port,);

var db=new mongo.Db("node-mongodb",server,);

db.open(function (err,db) {

db.collection("employees", function (err,collection) {

if(err) throw err;

else{

collection.find({}).toArray(function(err,docs){

else{

console.log(docs);

db.close();

}

});

}

});

});

2.7.四、帶查詢條件的搜索

var mongo=require("mongodb");

var host="localhost";

var port="27017" ;

var server=mongo.Server(host,port,);

var db=new mongo.Db("node-mongodb",server,);

db.open(function (err,db) {

db.collection("users", function (err,collection) {

if(err) throw err;

else{

collection.find(}).toArray(function(err,docs){

else{

console.log(docs);

db.close();

}

});

}

});

});

2.7.五、多條件查詢

插入一批數據,而且進行搜索type==food且price字段值小於10

var mongo=require("mongodb");

var host="localhost";

var port="27017" ;

var server=mongo.Server(host,port,);

var db=new mongo.Db("node-mongo-examples",server,);

var docs=[

{type:"food",price:11},

{type:"food",price:10},

{type:"food",price:9},

{type:"food",price:8},

{type:"book",price:9}

];

db.open(function (err,db) {

db.collection("goods", function (err,collection) {

if(err) throw err;

else{

collection.insert(docs, function (err,docs) {

else{

collection.find(}).toArray(

function(err,docs){

if(err) throw err;

else{

console.log(docs);

db.close();

}

}

);

}

})

}

});

});

查詢中的或的表達:

如:查詢where type=」food」 or price

collection.find({$or:[

,

}

]})

3、總結

1.什麼是MongoDB?有什麼優缺點?

2.MongoDB的增刪改查

3.Node中如何操做MongoDB

4、後述

    本小節相關代碼見百度網盤:連接:http://pan.baidu.com/s/1skML9Xr 密碼:6qgn

    本小節咱們主要介紹了MongoDB的更經常使用的較高級一些的內容,主要包括MongoDB的增刪改查及、及如何與Node連結操做的示例代碼。爲後繼咱們的更高級的項目部分作了一個必要的技術儲備。(PS:本部份內容涉及到一些簡單的Node知識,須要你們自行補充一些關於Node的基本用法,後繼我也打算較系統的出一些關於Node及Angular2的零基礎入門內容)。

 

下章劇透:

《項目實戰:基於Angular2+Mongodb+Node技術實現的多用戶博客系統教程(4)》

                                                              --基於Node的Express項目環境框架搭建

相關文章
相關標籤/搜索