实战Angular2MongodbNode博客系统(二)

实战Angular2MongodbNode博客系统(二),第1张

概述介绍《实战Angular2/Mongodb/Node博客系统(二)》开发教程,希望对您有用。

《实战Angular2/Mongodb/Node博客系统(二)》要点:
本文介绍了实战Angular2/Mongodb/Node博客系统(二),希望对您有用。如果有疑问,可以联系我们。

一、前言

在开始正式讲解本系统前,我们可能需要给大家准备一些基本知识的储备,本节我们将会给大家快速的补充一下本系统必须的MongoDB部分的知识点,具体包含以下内容:

了解什么是MongoDB以及MongoDB的特性

掌握MongoDB最常见的用法

掌握MongoDB更高级的一些用法

MongoDB与Node的互 *** 作

二、认识非关系型数据库MongoDB

2.1、MongoDB简介

官方定义:MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储办理方案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似Json的bson格式,因此可以存储比较复杂的数据类型.Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引.

通俗解释: Mongo DB,是目前在IT行业非常流行的一种非关系型数据库(Nosql),其灵活的数据存储方式,备受当前IT从业人员的青睐.Mongo DB很好的实现了面向对象的思想(OO思想),在Mongo DB中 每一条记录都是一个document对象.Mongo DB最大的优势在于所有的数据持久 *** 作都无需开发人员手动编写SQL语句,直接调用办法就可以轻松的实现CRUD *** 作.

特点

1、MongoDB是基于文档的数据库

2、是介于关系型数据库和非关系型数据库之间的产品(最像关系性数据库的Nosql)

3、支持类似Json的bson格式,数据结构非常松散

官网地址:http://www.mongodb.org/ 百度百科:http://baike.baIDu.com/subvIEw/3385614/9338179.htm

2.2、MongoDB优缺点

优点: 弱一致性 文档结构的存储方式 内置GrIDFS(分布式文件系统)

缺点: 不支持事务 空间占用大

2.3、主要适用场合

其主要场景如下:

1)网站实时数据处理.它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性.

2)缓存.由于性能很高,它适合作为信息基础设施的缓存层.在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载.

3)高伸缩性的场景.非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包括对MapReduce引擎的内置支持.

不适用的场景如下:

1)要求高度事务性的系统.

2)传统的商业智能应用.

3)复杂的跨文档(表)级联查询.

三、MongoDB安装配置

1)在官网直接下载安装包,下载地址:http://www.mongodb.org/downloads

2)安装非常的简单只要,解压或者安装就可以.这取决于你下载的是msi安装包

是zip压缩包.

如果是zip的压缩包.直接解压,解压后,放在D:/MongoDB目录下.为了命令行的方便,可以把D:/MongoDB/bin加到系统环境变量的path中.

如果是msi安装包.基本默认安装下一步下一步即可,注意你的安装路径.

3)测试是否安装成功

D:\>mongod --dbpath D:/MongoDB/data

Sun Oct 24 15:07:05 MongoDB starting : pID=2472 port=27017

dbpath=D:/MongoDB/data 32-bit

** NOTE: This is a development version (1.7.1) of MongoDB.

....

Sun Oct 24 15:07:05 [websvr] web admin interface Listening on port 28017

由于是开发版,上面就有个警告,没关系,忽略它.

最后两行说明的数据库端口和Web端口,分别是27017和28017,在浏览器中打开http://localhost:27017,可以看到其相关的一些信息.

这样说明安装成功.

四、MongoDB基本用法

第一部分:MongoDB基础

4.1、创建库

use 命令

MongoDB use DATABASE_name 用于创建数据库.该命令将创建一个新的数据库,如果它不存在,否则将返回现有的数据库.

语法:

use DATABASE 语句的基本语法如下:

use DATABASE_name

示例:

如果想创建一个数据库名称 <testDB>,那么 use DATABASE 语句如下:

>use testDB

switched to db testDB

要检查当前选择的数据库使用命令 db

>db

testDB

PS:

前提1 - mongodb安装在d:/mongodb目录下

前提2 - 已经将d:/mongdb/bin配置在windows环境变量的path路径中

前提3 – 在d:/mongodb/目录下新建一data文件夹

前提4 – 运行cmd命令,在命令行中健入如下命令:

> mongod --dbpath D:/MongoDB/data

运行如下图所示:

说明mongodb服务器启动在:127.0.0.1:385979端口处监听哀求!

重新打开一新的控制台:

并健入如下命令:mongo

用于连结服务器,默认连结他的默认数据库test

说明创建数据库成功!

查看数据库:

控制台中健入如下命令:show dbs,注意此时显示的只会有local数据库,却没有testDB,原因是因此时数据库并没有集合(数据),所以此时只有逻辑数据库产生,并没有产真正意义上的物理数据,必须调用db.createCollection("集合名")后,具体的后面会讲到,再次运行: show dbs命令,才能看到testDB数据库,另外,mongodb的命令是区分大小写的,这一点也是要注意!

4.2、删除库

dropDatabase()办法

MongoDB db.dropDatabase() 命令是用来删除一个现有的数据库.

语法:

dropDatabase() 命令的基本语法如下:

> db.dropDatabase()

这将删除选定的数据库.如果还没有选择任何数据库,然后它会删除默认的 ' test' 数据库

示例:

首先,检查列表数据库通过使用命令 show dbs

>show dbs

local 0.78125GB

mydb 0.23012GB

test 0.23012GB

>

如果想删除新数据库 <mydb>,那么 dropDatabase() 命令如下:

>use mydb

switched to db mydb

>db.dropDatabase()

>{ "dropped" : "mydb","ok" : 1 }

>

现在检查的数据库列表:

>show dbs

local 0.78125GB

test 0.23012GB

>

4.3、创建集合

在mongodb里面,没有表的概念,集合(collections)就相当于传统数据库中的表.

createCollection() 办法

MongoDB db.createCollection(name,options) 是用来创建集合.

语法:

基本的 createCollection() 命令语法如下:

db.createCollection(name,options)

在命令中,name 是要创建的集合的名称. Options 是一个文件,用于指定配置的集合

选项参数是可选的,所以只需要到指定的集合名称.以下是可以使用的选项列表:

例子:

createCollection() 办法不使用选项的基本语法如下:

>use test

switched to db test

>db.createCollection("mycollection")

{ "ok" : 1 }

>

可以检查通过使用创建的集合命令 show collections

>show collections

mycollection

system.indexes

下面的例子显示了几个重要的选项 createCollection()办法的语法:

>db.createCollection("mycol",{ capped : true,autoIndexID : true,size : 6142800,max : 10000 } )

{ "ok" : 1 }

>

在MongoDB中,不需要创建集合.当插入一些文件 MongoDB 自动创建的集合.

>db.newdb.insert({"name" : "fwytech"})

>show collections

mycol

mycollection

system.indexes

newdb

>

4.4、删除集合

drop() 办法

MongoDB 的 db.collection.drop() 是用来从数据库中删除一个集合.

语法:

drop() 命令的基本语法如下

db.ColLECTION_name.drop()

示例:

首先,检查可用的集合在数据库 mydb

>use mydb

switched to db mydb

>show collections

mycol

mycollection

system.indexes

fwytech

>

现在删除集合名称为 mycollection

>db.mycollection.drop()

true

>

再次检查到数据库中的集合列表

>show collections

mycol

system.indexes

fwytech

>

drop() 办法将返回 true,如果选择成功收集被丢弃,否则将返回 false

第二部分:MongoDB高阶

2.1、MongoDB支持的数据类型

MongoDB支持许多数据类型的列表下面给出:

String : 这是最常用的数据类型来存储数据.在MongoDB中的字符串必须是有效的UTF-8.

Integer : 这种类型是用来存储一个数值.整数可以是32位或64位,这取决于您的服务器.

Boolean : 此类型用于存储一个布尔值 (true/ false) .

Double : 这种类型是用来存储浮点值.

Min/ Max keys : 这种类型被用来对BSON元素的最低和最高值比较.

Arrays : 使用此类型的数组或列表或多个值存储到一个键.

Timestamp : 时间戳.这可以方便记录时的文件已被修改或添加.

Object : 此数据类型用于嵌入式的文件.

Null : 这种类型是用来存储一个Null值.

Symbol : 此数据类型用于字符串相同,但它通常是保留给特定符号类型的语言使用.

Date : 此数据类型用于存储当前日期或时间的UNIX时间格式.可以指定自己的日期和时间,日期和年,月,日到创建对象.

Object ID : 此数据类型用于存储文档的ID.

Binary data : 此数据类型用于存储二进制数据.

Code : 此数据类型用于存储到文档中的JavaScript代码.

Regular Expression : 此数据类型用于存储正则表达式

2.2、MongoDB 插入文档

insert() 办法

要插入数据到 MongoDB 集合,需要使用 MongoDB 的 insert() 或 save() 办法.

语法

insert() 命令的基本语法如下:

>db.ColLECTION_name.insert(document)

例子

@R_419_5979@: 'MongoDB OvervIEw',

description: 'MongoDB is no sql database',

by: 'tutorials fwytech',

Tags: ['mongodb','database','Nosql'],

likes: 100

})

这里 mycol 是集合的名称,如前面的教程中创建.如果集合在数据库中不存在,那么MongoDB 将创建此集合,然后把它插入文档.插入文档中,如果我们不指定_ID参数,然后MongoDB 本文档分配一个独特的ObjectID.

要插入单个查询的多个文档,可以传递一个数组 insert() 命令的文件.

示例

{

@R_419_5979@: 'MongoDB OvervIEw',

likes: 100

},

{

@R_419_5979@: 'Nosql Database',

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

likes: 20,

comments: [

{

user:'user1',

message: 'My first comment',

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

like: 0

}

]

}

])

2.3、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.4、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.5、MongoDB 查询文档

find() 办法

要从MongoDB 查询集合数据,需要使用MongoDB 的 find() 办法.

语法

基本的find()办法语法如下

>db.ColLECTION_name.find()

find() 办法将在非结构化的方式显示所有的文件.

pretty() 办法

结果显示在一个格式化的方式,可以使用 pretty() 办法.

语法:

例子

{

"@R_419_5979@": "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),

"@R_419_5979@": "MongoDB OvervIEw",

"by": "fwytech",

"likes": "100"

}

对于上面给出的例子相当于where子句 ' where by='fwytech' AND @R_419_5979@='MongoDB OvervIEw',可以通过任意数量的键值对在 find 子句.

MongoDB中OR

语法:

OR条件的基础上要查询文件,需要使用$or关键字.OR 基本语法如下所示:

{

$or: [

,

]

}

).pretty()

例子

下面给出的例子将显示所有的教程,由'fwytech' 所写或标题是MongoDB OvervIEw

{

"_ID": ObjectID(7df78ad8902c),

"likes": "100"

}

AND 和 OR 一起使用

例子

下面给出的例子将显示有像的文件大于100,其标题是“MongoDB OvervIEw'或者是'fwytech' .等效于 sql where子句 为 'where likes>10 AND (by = 'fwytech' OR @R_419_5979@ = 'MongoDB OvervIEw')'

{

"_ID": ObjectID(7df78ad8902c),

"likes": "100"

}

2.6、MongoDB limit/限制记录

limit() 办法

要限制 MongoDB 中的记录,需要使用 limit() 办法. limit() 办法接受一个数字型的参数,这是要显示的文档数.

语法:

limit() 办法的基本语法如下

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

示例

考虑集合myycol具有以下的数据

{ "@R_419_5979@":"a",”clicks”:1}

{ "@R_419_5979@":"b",”clicks”:2}

{ "@R_419_5979@":"c",”clicks”:3}

下面的例子将显示只有2个文档,当执行文档查询.

{ "@R_419_5979@":"a",”clicks”:2}

如果不指定数量 limit() 办法的参数,它会显示从集合中的所有文件.

MongoDB Skip() 办法

除了limit() 办法,还有一个办法skip() 也接受数字类型的参数,并使用跳过的文档数.

语法:

skip()办法基本语法如下

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

示例:

下面的例子将只显示第二个文档.

{ "@R_419_5979@":"b",”clicks”:2}

请注意,skip()办法的默认值是0

2.7、Node中 *** 作MongoDB

PS:

前提-1:已经安装node

前提-2:已经安装mongodb

前提-3:项目中安装了mongodb模块

前提-4:Mongodb服务器已经开启监听

命令如下:cnpm install mongodb

2.7.1、连接数据库

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.2、插入数据

插入数据后,在控制台中输出数据文档的内容

var mongo=require("mongodb");

var host="localhost";

var port="27017";

var server=new mongo.Server(host,);//创建数据库所在的服务器服务器

var db=new mongo.Db("node-mongodb",db) {//连接数据库

if(err)

throw err;

else{

db.collection("employees",collection) {

collection.insert(,docs) {

console.log(docs);

db.close();

});

});

}

});

db.on("close",db) {//关闭数据库

if(err) throw err;

else console.log("成功关闭数据库.");

});

2.7.3、读取数据

var mongo=require("mongodb");

var host="localhost";

var port="27017" ;

var server=mongo.Server(host,);

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

db.open(function (err,db) {

db.collection("employees",collection) {

if(err) throw err;

else{

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

else{

console.log(docs);

db.close();

}

});

}

});

});

2.7.4、带查询条件的搜索

var mongo=require("mongodb");

var host="localhost";

var port="27017" ;

var server=mongo.Server(host,db) {

db.collection("users",collection) {

if(err) throw err;

else{

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

else{

console.log(docs);

db.close();

}

});

}

});

});

2.7.5、多条件查询

插入一批数据,并且进行搜索type==food且price字段值小于10

var mongo=require("mongodb");

var host="localhost";

var port="27017" ;

var server=mongo.Server(host,);

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

var docs=[

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

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

{type:"book",price:9}

];

db.open(function (err,db) {

db.collection("goods",collection) {

if(err) throw err;

else{

collection.insert(docs,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

六、后述

本小节我们主要介绍了MongoDB的涉及到开发部分的常规内容,主要包含MongoDB的增删改查及如何与Node连结 *** 作的示例代码.为后继我们的更高级的项目部分做了一个必要的技术储备.(PS:本部分内容涉及到一些简单的Node知识,需要大家自行补充一些关于Node的基本用法,后继我也打算较系统的出一些关于Node及Angular2的零基础入门内容),下一篇我们将正式进入《基于Angular2+Mongodb+Node技术实现的多用户博客系统教程》--系统后台Node Express框架搭建.


《实战Angular2/Mongodb/Node博客系统(二)》是否对您有启发,欢迎查看更多与《实战Angular2/Mongodb/Node博客系统(二)》相关教程,学精学透。内存溢出PHP学院为您提供精彩教程。

总结

以上是内存溢出为你收集整理的实战Angular2/Mongodb/Node博客系统(二)全部内容,希望文章能够帮你解决实战Angular2/Mongodb/Node博客系统(二)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1152192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存