zoukankan      html  css  js  c++  java
  • 项目实战(连载):基于Angular2+Mongodb+Node技术实现的多用户博客系统教程(3)

    本章主要讲什么(一句话)?


     

    一、前言


     

    上一小节我们先简单的介绍MongoDB的一些入门的内容,主要包括MongoDB的下载、安装、配置及MongoDB简单的建库,删库,查询文档等基本功能,本篇我们将继续《基于MongoDB的MyBlog数据库设计篇》--高级篇,在此部分内容里将会涉及到以下内容:

    1、MongoDB的的增、删、改、查语法及示例

    2、Node与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)

    例子

    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.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() 方法.

    语法:

    例子

    {

    "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.6、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.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,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.3、读取数据

    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.4、带查询条件的搜索

    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.5、多条件查询

    插入一批数据,并且进行搜索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项目环境框架搭建

     
  • 相关阅读:
    Jwt访问api提示401错误 Authorization has been denied for this request
    git commit的规范
    postman中如何使用OAuth
    在outlook中查找Skype的聊天记录
    nuget sources
    NuGet version
    Forcing restore from package sources
    同时打印多个worksheets
    Redis使用认证密码登录
    Linux wait函数详解
  • 原文地址:https://www.cnblogs.com/fwyTech/p/6361625.html
Copyright © 2011-2022 走看看