NodeJs连接操作MongoDB数据库

一,介绍

MongoDB是一种文档导向数据库管理系统,由C++撰写而成。介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。

Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具。版本:5.4.4

  1. Github地址:https://github.com/Automattic/mongoose
  2. API Docs:http://mongoosejs.com/docs/guide.html

二,安装配置

第一步:安装模块

 cnpm install mongoose  --save

第二步:引入模块

  // 引入模块
var mongoose=require('mongoose');

第三步:配置连接

 var options = {
db_user: "myAdminUser",//添加的普通账户名
db_pwd: "myAdminPass",
db_host: "127.0.0.1",
db_port: 27017,
db_name: "jackson_YingQi",//数据库名称
useNewUrlParser: true
}; var dbURL = "mongodb://" + options.db_user + ":" + options.db_pwd + "@" + options.db_host + ":" + options.db_port + "/" + options.db_name;
mongoose.connect(dbURL);// 连接数据库

连接的方式有

  1. 连接本地数据库服务器,端口是默认的:mongodb://localhost
  2. 使用用户名myAdminUser,密码myAdminPass登录localhost的admin数据库:mongodb://myAdminUser:myAdminPass@localhost
  3. 使用用户名myAdminUser,密码myAdminPass登录localhost的jackson_YingQi数据库:mongodb://myAdminUser:myAdminPass@localhost/jackson_YingQi

更多连接方式,听查看http://www.runoob.com/mongodb/mongodb-connections.html

第四步:获取数据库连接句柄

 // 得到数据库连接句柄
let dbHandle = mongoose.connection;

第五步:通过数据库句柄,监听mongoose

//通过 数据库连接句柄,监听mongoose数据库成功的事件
dbHandle.on('open', function (err) {
if (err) {
console.log('数据库连接失败');
throw err;
}
console.log('数据库连接成功')
})

第六步:定义表数据结构table.json

 {
"User": {
"title": "String",
"description": "String",
"by": "String",
"url": "String",
"tags": "Array",
"likes": "Number"
}
}

第七步:表的数据结构和表关联

 let MongoDbAction = {}
let filename = path.join(path.dirname(__dirname).replace('app', ''), 'config/table.json');
let tabConf = JSON.parse(fs.readFileSync(path.normalize(filename)));
/**
*
* @param table_name 表名
*/
MongoDbAction.getConnection = function (table_name) {
//定义表数据结构
var userModel = new mongoose.Schema(tabConf[table_name], {
versionKey: false //去除: - -v
})
// 将表的数据结构和表关联起来
// var productModel=mongoose.model('anyname',表的数据结构,表名)
var client = mongoose.model(table_name, userModel, table_name);
return client;
};

第八步:数据库操作

常用操作方法,可以查看官方文档

1,插入数据

单条:

 /**
* 插入单条数据
* @param table_name 表名
* @param insertData 插入的数据
* @param callback 回调方法
*/
MongoDbAction.insertData= function (table_name, insertData , callback) {
var node_model = this.getConnection(table_name);
node_model.insertOne(insertData , function (err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};

多条:

 /**
* 插入多条数据
* @param table_name 表名
* @param insertData 插入的数据
* @param callback 回调方法
*/ MongoDbAction.insertMany = function (table_name, insertData, callback) {
var node_model = this.getConnection(table_name);
node_model.insertMany(insertData,function(err,res){
if(err){
callback(err);
}
else {
callback(null, res);
}
});
};

console.log("插入的文档数量为: " + res.insertedCount);res.insertedCount 为插入的条数。

2,查询数据

单条:

 /**
* 查询单条数据
* @param table_name 表名
* @param conditions 查询条件
* @param callback 回调方法
*/
MongoDbAction.findOne = function (table_name, conditions, callback) {
var node_model = this.getConnection(table_name);
node_model.findOne(conditions, function (err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};
 /**
* 根据_id查询指定的数据
* @param table_name 表名
* @param _id 可以是字符串或 ObjectId 对象。
* @param callback 回调方法
*/
MongoDbAction.findById = function (table_name, _id, callback) {
var node_model = this.getConnection(table_name);
node_model.findById(_id, function (err, res){
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};

多条:

 /**
* 查询数据
* @param table_name 表名
* @param conditions 查询条件
* @param fields 待返回字段
* @param callback 回调方法
*/
MongoDbAction.find = function (table_name, conditions, fields, callback) {
var node_model = this.getConnection(table_name);
node_model.find(conditions, fields || null, {}, function (err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};
 /**
* 连写查询
* @param table_name 表名
* @param conditions 查询条件 {a:1, b:2}
* @param options 选项:{fields: "a b c", sort: {time: -1}, limit: 10}
* @param callback 回调方法
*/
MongoDbAction.where = function (table_name, conditions, options, callback) {
var node_model = this.getConnection(table_name);
node_model.find(conditions)
.select(options.fields || '')
.sort(options.sort || {})
.limit(options.limit || {})
.exec(function (err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};

返回条数可以使用 limit() 方法,该方法只接受一个参数,指定了返回的条数。

排序 使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。

指定跳过的条数,可以使用 skip() 方法。

 /**
* 连接查询 $lookup 来实现左连接。
* @param table_name 表名
* @param conditions 查询条件
* @param callback 回调方法
*/
MongoDbAction.findOne = function (table_name, conditions, callback) {
var node_model = this.getConnection(table_name);
node_model.aggregate([
{ $lookup:
{
from: 'products', // 右集合
localField: 'product_id', // 左集合 join 字段
foreignField: '_id', // 右集合 join 字段
as: 'orderdetails' // 新生成字段(类型array)
}
}
], function (err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};

mongoDB 不是一个关系型数据库,但我们可以使用 $lookup 来实现左连接。

3,更新数据

单条:

 /**
* 更新单条数据
* @param table_name 表名
* @param conditions 查询条件 {"name":'jackson影琪'};
* @param updateStr 更新数据 {$set: { "url" : "https://www.cnblogs.com/jackson-zhangjiang" }};
* @param callback 回调方法
*/
MongoDbAction.updateOne= function (table_name, conditions,updateStr , callback) {
var node_model = this.getConnection(table_name);
node_model.updateOne(conditions,updateStr, function (err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};

多条:

 /**
* 更新多条数据
* @param table_name 表名
* @param conditions 查询条件 {"type":'1'};
* @param updateStr 更新数据 {$set: { "url" : "https://www.cnblogs.com/jackson-zhangjiang" }};
* @param callback 回调方法
*/
MongoDbAction.updateMany= function (table_name, conditions,updateStr , callback) {
var node_model = this.getConnection(table_name);
node_model.updateMany(conditions,updateStr, function (err, res) {
if (err) {
callback(err);
} else {
console.log(res.result.nModified + " 条文档被更新");
callback(null, res);
}
});
};

result.nModified 为更新的条数。

 4,删除数据

单条:

 /**
* 删除单条数据
* @param table_name 表名
* @param conditions 查询条件 {"name":'jackson影琪'};
* @param callback 回调方法
*/
MongoDbAction.deleteOne= function (table_name, conditions, callback) {
var node_model = this.getConnection(table_name);
node_model.deleteOne(conditions, function (err, res) {
if (err) {
callback(err);
} else {
callback(null, res);
}
});
};

多条:

 /**
* 删除条数据
* @param table_name 表名
* @param conditions 查询条件 {"type":'1'};
* @param callback 回调方法
*/
MongoDbAction.deleteMany= function (table_name, conditions, callback) {
var node_model = this.getConnection(table_name);
node_model.deleteMany(conditions, function (err, res) {
if (err) {
callback(err);
} else {
console.log(obj.result.n + " 条文档被删除");
callback(null, res);
}
});
};

obj.result.n 删除的条数。

以使用 drop() 方法来删除集合

三,常用方法抛出接口

以查出一条数据为例,其他的方法类似

引入

 //先包含进来
var MongoDB = require('../services/db_mongodb.js');

抛出接口

 router.put('/user/getSingleData', function (req, res) {
var singleId = req.body.singleId;//'5c4036b04471e7c18ef8f57f'
var tableName = req.body.tableName;//'User'
let data = {
httpCode:200,
message:"查询成功!",
data:null,
}
//查询一条数据
MongoDB.findOne(tableName, {_id:singleId}, function (err, result) {
if(!err){
data.data= result
res.status(data.httpCode).json(data);
}else{
data.httpCode=500
data.message="查询失败!"
data.data= err
res.status(data.httpCode).json(data);
}
});
})

成功返回的结果

失败返回的结果

NodeJs连接操作MongoDB数据库的更多相关文章

  1. Nodejs学习笔记(二)--- 操作MongoDB数据库

    最近看了一些关于mongodb的文章,然后就想知道nodeJS是怎么连接的所以我就尝试去了解了一波(这个菜鸟驿站这个网站还不错,虽然知识文档不是最新的,但是还是蛮好的: 顺便官网地址是这个哦:http ...

  2. koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  3. koa 基础(二十)nodejs 操作mongodb数据库 --- 新增数据

    1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...

  4. 二十六、Nodejs 操作 MongoDb 数据库

    一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...

  5. NodeJS操作MongoDB数据库

    一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...

  6. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  7. Koa 操作 Mongodb 数据库

    node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...

  8. 不使用spring的情况下原生java代码两种方式操作mongodb数据库

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  9. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

随机推荐

  1. 我眼中的 Nginx(二):HTTP/2 dynamic table size update

    张超:又拍云系统开发高级工程师,负责又拍云 CDN 平台相关组件的更新及维护.Github ID: tokers,活跃于 OpenResty 社区和 Nginx 邮件列表等开源社区,专注于服务端技术的 ...

  2. [开发技巧]·Numpy中对axis的理解与应用

    [开发技巧]·Numpy中对axis的理解与应用 1.问题描述 在使用Numpy时我们经常要对Array进行操作,如果需要针对Array的某一个纬度进行操作时,就会用到axis参数. 一般的教程都是针 ...

  3. python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍

    目录 python学习第八讲,python中的数据类型,列表,元祖,字典,之字典使用与介绍.md 一丶字典 1.字典的定义 2.字典的使用. 3.字典的常用方法. python学习第八讲,python ...

  4. 搞懂MySQL分区

    一.InnoDB逻辑存储结构 首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地存放在表空间,表空间又由段,区,页组成. 段 段就是上图的segment区域,常见的段有数据段. ...

  5. Spring Cloud 系列之 Eureka 实现服务注册与发现

    如果你对 Spring Cloud 体系还不是很了解,可以先读一下 Spring Cloud 都有哪些模块 Eureka 是 Netflix 开源的服务注册发现组件,服务发现可以说是微服务架构的核心功 ...

  6. 基于Kubernates微服务案例

    企业业务上云的三种架构 容器的三个视角 从运维角度 数据工程师角度 开发角度微服务化 12 Factor Related Reference: https://kubernetes.io/https: ...

  7. servlet doGet()方法获取字符串乱码问题

    当你遇到ajax向servlet发送数据出现乱码问题的时候不要惊慌,现有以下两个解决办法 (1)在doGet和doPost方法中添加以下代码 request.setCharactersEncoding ...

  8. Dynamics 365-关于BPF的进一步探究

    关于BPF是什么,以及如何在CRM中配置BPF,可以参阅熊宸大神的博客Dynamics 365 Business Process Flow -- 让你不再惧怕复杂的业务流程! 1. CRM中发生了什么 ...

  9. (七) Keras 绘制网络结构和cpu,gpu切换

    视频学习来源 https://www.bilibili.com/video/av40787141?from=search&seid=17003307842787199553 笔记 首先安装py ...

  10. MySQL向数据库表的某字段追加数据

    使用CONCAT()函数 mysql向表中某字段后追加一段字符串(field为字段名): update table_name set field=CONCAT(field,'str',) mysql ...