项目实战(连载):基于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项目环境框架搭建

相关文章
相关标签/搜索