nodejs使用mongodb做数据持久化

前段时间,写了一篇博客,讲解了在Mac下使用brew安装mongodb,这篇文章可以看做是续篇,使用nodejs操作mongodb,并封装一些有用的方法。

nodejs操作mongodb,首先要使用npm安装操作mongodb数据库的包,有两个选择 mongoosemongodb,由于mongodb的使用方式更接近mongodb原生的语法,所以这里我们使用mongodb模块,操作数据库。

Mac下使用brew安装mongodb这篇文章中,已经讲解了mongodb数据库的性质和安装,也介绍了一个连接mongodb的客户端工具 Robomongo ,所以这里就不在赘述。

不过,简单介绍下mongodb数据库的语法还是有必要的,如果你已经了解,那么可以跳过这里,接下来,我们就使用原生的语法来做一次CURD操作。

1、启动mongodb服务

mongo

在终端执行命令 mongo 就可以启动mongodb服务了,我们会进入到mongo的交互模式,如图:

我们可以看到,mongo启动后,默认连接的是test数据库,注意,mongodb是非关系型数据库,和MySQL不同,在mongodb中:

nodql           <=====>        sql
数据库(database) <=====> 数据库(database)
集合(collection) <=====> 表(table)
文档(docs)         <=====> 行(rows)
字段(field)         <=====> 列(field)

我们执行下面的命令来查看我们当前操作的数据库:

db

如下,我们当前操作的数据库是 test 库:

也可以执行下面这条命令来查看所以数据库:

show dbs

如下图,展示出我们所有的数据库,但是请注意,如果你的数据库里面没有任何数据,是不会被显示出来的:

我们可以使用下面这条命令切换数据库:

use hcy

这样,我们就切换到了数据库名字为hcy的数据库,我们可以执行 db 命令来查看是否切换成功:

注意,使用use db_name来切换数据库的时候,如果该数据库不存在,那么会创建该数据库,所以如果你要创建一个数据库,也是用use命令就好啦。

如果要删除一个数据库,我们首先要切换到当前数据库下,然后执行下面的命令就可以删除这个数据库了:

use hcy

db.dropDatabase()

这样就会删除hcy这个数据库,我们再来查看所有数据库,发现hcy库已经不见了,被我们删掉了:

下面,我们讲述最简单的curd操作:

1、向hcy数据库中的users集合插入一个文档

标题中的话如果翻译成sql数据库的语言就是:“向hcy数据库中的users表中插入一条数据”,那么我们看看怎么向mongodb数据库的集合中插入文档:

use hcy

db.users.insert({
    name : 'hcy',
    age : 21
})

首先,我们切换到hcy数据库,如果没有该数据库就会自动创建该数据库,然后执行插入数据操作,我们可以使用下面的命令查询一个集合中的数据:

db.users.find()

这样会查询出hcy库中users集合下面的所有数据,如果需要条件查找,像下面这条命令,只需要在find()方法中传入一个json对象作为筛选条件即可:

db.users.find({name:'hcy'})

删除数据:

db.users.remove()

上面的数据会删除users集合下得所有文档(数据),也可以传入第一个参数,作为筛选条件:

db.users.remove({
    name : 'hcy'
})

上面的命令会删除掉users集合中,所有name值为hcy的所有文档,也可以传入第二个参数,是一个boolean值,true为只删除一条:

db.users.remove({
    name : 'hcy'
}, true)

修改数据有两种方法,可以使用 update()方法,也可以使用save()方法,先来看update()方法:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc…)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。

这里我只介绍了语法,也可以使用save()方法:

db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

document : 文档数据。
writeConcern :可选,抛出异常的级别。

例子如下:

db.users.save({
    "_id" : ObjectId("56064f89ade2f21f36b03136"),
    "name" : "aaaa",
    "age" : "100"
})

上面的例子中,我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据。

如果想了解更多mongodb原生语法知识,这里是一个好去处

现在,你应该对mongodb有了一定的了解了,那么我们如何在nodejs中操作mongodb呢?

首先在项目中使用npm安装mongodb模块

npm install --save mongodb

当我们想要在项目中使用这个模块操作数据库的时候,我们就可以引入该模块

var MongoClient = require('mongodb').MongoClient;

上面的代码返回一个mongodb客户端实例,连接数据库:

var mongoConnectUrl = 'mongodb://localhost:27017/hcy';
MongoClient.connect(mongoConnectUrl, function(err, db){
    if(err) return console.log(err);
    console.log('连接成功');
});

上面的mongoConnectUrl是我们连接mongodb数据库的一个url,注意,mongodb默认监听的端口是27017,另外,如果始终连接不成功,你可以把localhost换成你电脑的ip地址试一试,笔者在测试的时候只能使用ip地址,使用localhost始终连接失败,在url的最后是你要连接的数据库,这里我们连接到hcy数据库。

连接数据库成功后,我们可以创建一个集合,并操作里面的数据,我们封装一个方法:

插入数据

/**
 * 插入数据
 * @method insertData
 * @param {String} mongoConnectUrl 数据库连接
 * @param {String} coll 集合名称
 * @param {Array} data 插入的数据
 * @param {Function} callback 回调函数
 * @return {Null}
 *
 */
function insertData(mongoConnectUrl, coll, data, callback){
    MongoClient.connect(mongoConnectUrl, function(err, db){
        if(err) return console.log(err);
        // 打开集合
        var collection = db.collection(coll);
        // 插入数据
        collection.insertMany(data, function(err, result){
            //console.log(result)
            // 记得要关闭数据库
            db.close();
            callback(result);
        });

    });
}

查询数据

/**
 * 查询数据
 * @method findData
 * @param {String} mongoConnectUrl 数据库连接
 * @param {String} coll 集合名称
 * @param {Object} opation 条件
 * @param {Function} callback 回调函数
 * @return {Null}
 *
 */
function findData(mongoConnectUrl, coll, opation, callback){
    MongoClient.connect(mongoConnectUrl, function(err, db){
        if(err) return console.log(err);
        // 打开集合
        var collection = db.collection(coll);
        // 根据条件查询数据
        var userData = collection.find(opation);
        // 遍历数据
        userData.toArray(function(err2, docs) {
            // docs是查询出来的文档,json对象,可以打印出来看看
            db.close();
            callback(docs);
        });

    });
}

删除数据

/**
 * @method deleteData
 * @param {String} mongoConnectUrl 数据库连接
 * @param {String} coll 集合名称
 * @param {Object} opation 条件
 * @param {Number} num 删除数据的数量,即删除几条
 * @return {Null}
 *
 */
function deleteData(mongoConnectUrl, coll, opation, num, callback){
    var i = num;
    var res = [];
    var tempRes = [];
    var thisFn = arguments.callee;
    MongoClient.connect(mongoConnectUrl, function(err, db){
        if(err) return console.log(err);

        var collection = db.collection(coll);
        if(i > 0){
            i--;
            collection.deleteOne(opation, function(err, result){
                // console.log(result)
                res.push(result);
                thisFn(mongoConnectUrl, coll, opation, i, callback);
                if(i == 0){
                    db.close();
                    tempRes = res;
                    res = []
                    i = 0;
                    callback(tempRes);
                }

            });
        }

    });
},

修改一条数据

/**
 * @method deleteData
 * @param {String} mongoConnectUrl 数据库连接
 * @param {String} coll 集合名称
 * @param {Object} opation 条件
 * @param {Object} data 更新的数据
 * @return {Null}
 *
 */
function deleteData(mongoConnectUrl, coll, opation, data, callback){
    MongoClient.connect(mongoConnectUrl, function(err, db){
        if(err) return console.log(err);

        var collection = db.collection(coll);

        collection.updateOne(opation, { $set: data }, function(err, result) {
            db.close();
            callback(result);
        });

    });
},

原文:大专栏  nodejs使用mongodb做数据持久化

原文地址:https://www.cnblogs.com/petewell/p/11611876.html

时间: 2024-10-09 05:23:02

nodejs使用mongodb做数据持久化的相关文章

nodejs读取mongodb返回数据到前台页面[object object]异常处理

第二步中的<%- %>尤为重要,不然会出现不可预见的错误,如非法字符'_'或者非法字符'o'等异常 版权声明:本文为博主原创文章,未经博主允许不得转载.

DataPersistence(数据持久化: 文件读写, NSUserDefault, 归档)

 DataPersistence(数据持久化) 1.数据持久化?   数据永久的保存 2.为什么要做数据持久化?   要把之前的操作(存档, 记录等)保存起来 3.为什么数据之前保存不了呢?   以前的数据都存在内存中, 程序一旦终止, 内存就会被收回 4.数据保存到哪里, 才能做数据持久化   把数据存到硬盘里 5.存到硬盘的哪个位置呢?   沙盒机制: iOS会为每一个应用, 单独创建一个文件夹(沙盒), 这个文件夹只允许当前应用访问 6.如何通过代码获取路径? 7.沙盒文件夹又分了多个子文

Docker数据持久化与容器迁移

上节讲到当容器运行期间产生的数据是不会在写镜像里面的,重新用此镜像启动新的容器就会初始化镜像,会加一个全新的读写入层来保存数据.如果想做到数据持久化,Docker提供数据卷(Data volume)或者数据容器卷来解决问题,另外还可以通过commit提交一个新的镜像来保存产生的数据.那么,来一一看下各自的使用方法. 一.数据卷 数据卷特性: 可以绕过UFS文件系统,为一个或多个容器提供访问. 完全独立于容器的生存周期,因此不会在删除容器时删除其挂在的数据卷. 数据卷特点: 数据卷在容器启动初始化

数据持久化以及沙盒路径

什么是沙盒机制 简单对象写入文件 NSFileManager 复杂对象写入文件 数据持久化 什么是数据持久化? 数据的永久存储 为什么要做数据持久化?:存储在内存中的数据,程序关闭,内存释放,数据丢失,这种数据是临时的,用户下次打开应用程序,还要重新联网去刷新数据,无疑增加了用户的负担 数据持久化的本质:数据保存成文件,存储到程序的沙盒中 什么是沙盒机制? 每个应用程序位于文件系统的严格限制部分 每个应用程序只能在为该程序创建的文件系统中读取文件 每个应用程序在iOS系统内部都放在了统一的文件夹

dcoker 安装mysql和数据持久化

# mysql 镜像下载 docker pull mysql ( 版本自己选择) # run 服务 docker run --name mysql.5.5 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql -- name 容器名字 -p 端口映射 -e root 密码设置 -d 后台运行 # 可能遇到的问题 一.不能使用nivacate 连接问题 必须关闭防火墙 1.连接容器 docker exec -it 3d1a00bbf39e /bin

K8s之MySQL实现数据持久化

这个是一个只写配置及验证的博文...... 博文大纲:1.搭建nfs存储2.创建PV3.创建PVC4.确认pv及pvc的状态5.创建pod+svc(service)6.进入MySQL数据库,添加测试数据7.手动删除节点上的容器,验证数据库内的数据是否还存在8.模拟MySQL容器所在的节点宕机,验证数据是否会丢失9.client端访问MySQL数据库 k8s集群环境如下: master节点IP:192.168.20.6 node01节点IP:192.168.20.7 node02节点IP:192.

Docker数据持久化(1)

一.前言 当我们使用Docker创建一个mysql的container, 数据是存储在container内的.如果有一天不小心执行了docker rm $(docker ps -aq)删除所有container. 那么mysql里的数据也会被删掉, 这是不安全的.我们需要将数据持久化, 存储在container外部. 即使删除container也不会删除原有的数据. 二.容器的缺陷 容器中的数据可以存储在容器层.但是将数据存放在容器层存在以下问题:1.数据不是持久化.意思是如果容器删除了,这些数

nodejs 读取mongodb数据

启动数据mongodb 创建数据 use mongodbtest  =>  db.user.insert({"name":"eason","age":23,"sex":true}) =>可以查看下 有没有数据成功插入  db.user.find().pretty() nodejs 新建一个nodejstest.js var mongodb = require('mongodb');var server = new

nodeJS+bootstarp+mongodb整一个TODO小例子

又是一个简单的小玩意儿, 不过有个大玩意儿,就是nosql的mongodb(文件大小:130M),  你要下载一个mongdodb, 去官方网站下载 安装以后在mongodb的命令行目录下执行 mongod --dbpath=c:\mongodbInfo\ --port 27017 这个命令会在C盘新建一个叫做mongodInfo的目录用来保存mongodb的数据; nodeJS要安装mongodb的依赖库, 通过npm进行安装 npm install mongodb mongodb的API可以