上一小節咱們先簡單的介紹MongoDB的一些入門的內容,主要包括MongoDB的下載、安裝、配置及MongoDB簡單的建庫,刪庫,查詢文檔等基本功能,本篇咱們將繼續《基於MongoDB的MyBlog數據庫設計篇》--高級篇,在此部份內容裏將會涉及到如下內容:node
一、MongoDB的的增、刪、改、查語法及示例正則表達式
二、Node與MongoDB的互操做部分sql
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 : 此數據類型用於存儲正則表達式
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
}
]
}
])
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()
例子
{
}
)
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命令。
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"
}
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
PS:
前提-1:已經安裝node
前提-2:已經安裝mongodb
前提-3:項目中安裝了mongodb模塊
前提-4:Mongodb服務器已經開啓監聽
命令以下:cnpm install mongodb
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打開.
插入數據後,在控制檯中輸出數據文檔的內容
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("成功關閉數據庫.");
});
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();
}
});
}
});
});
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();
}
});
}
});
});
插入一批數據,而且進行搜索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:[
,
}
]})
1.什麼是MongoDB?有什麼優缺點?
2.MongoDB的增刪改查
3.Node中如何操做MongoDB
本小節相關代碼見百度網盤:連接:http://pan.baidu.com/s/1skML9Xr 密碼:6qgn
本小節咱們主要介紹了MongoDB的更經常使用的較高級一些的內容,主要包括MongoDB的增刪改查及、及如何與Node連結操做的示例代碼。爲後繼咱們的更高級的項目部分作了一個必要的技術儲備。(PS:本部份內容涉及到一些簡單的Node知識,須要你們自行補充一些關於Node的基本用法,後繼我也打算較系統的出一些關於Node及Angular2的零基礎入門內容)。
下章劇透:
《項目實戰:基於Angular2+Mongodb+Node技術實現的多用戶博客系統教程(4)》
--基於Node的Express項目環境框架搭建