NodeJs连接操作MongoDB数据库
NodeJs连接操作MongoDB数据库
一,介绍
MongoDB是一种文档导向数据库管理系统,由C++撰写而成。介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具。版本:5.4.4
- Github地址:https://github.com/Automattic/mongoose
- 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);// 连接数据库
连接的方式有
- 连接本地数据库服务器,端口是默认的:mongodb://localhost
- 使用用户名myAdminUser,密码myAdminPass登录localhost的admin数据库:mongodb://myAdminUser:myAdminPass@localhost
- 使用用户名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数据库的更多相关文章
- Nodejs学习笔记(二)--- 操作MongoDB数据库
最近看了一些关于mongodb的文章,然后就想知道nodeJS是怎么连接的所以我就尝试去了解了一波(这个菜鸟驿站这个网站还不错,虽然知识文档不是最新的,但是还是蛮好的: 顺便官网地址是这个哦:http ...
- koa 基础(二十一)nodejs 操作mongodb数据库 --- 查询数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- koa 基础(二十)nodejs 操作mongodb数据库 --- 新增数据
1.app.js /** * nodejs 操作mongodb数据库 * 1.安装 操作mongodb * cnpm install mongodb --save * 2.引入 mongodb 下面的 ...
- 二十六、Nodejs 操作 MongoDb 数据库
一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...
- NodeJS操作MongoDB数据库
一.node.js对于mongodb的基本操作 1.数据库的开机 首先我们要先对数据库进行开机的操作,建立一个文件夹用于存放数据库文档.如D:\mongo,接下去在cmd当中键入命令-> mon ...
- nodeJS中使用mongoose模块操作mongodb数据库
在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...
- Koa 操作 Mongodb 数据库
node-mongodb-native的介绍 使用基于官方的 node-mongodb-native 驱动,封装一个更小.更快.更灵活的 DB 模块, 让我们用 nodejs 操作 Mongodb 数 ...
- 不使用spring的情况下原生java代码两种方式操作mongodb数据库
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
- 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
随机推荐
- nginx 报错502Bad Gateway
场景: 目前在ECS中起了多个node服务,使用forever进程守护,最近,打开线上页面发现报错502 Bad Gateway;同时部分静态资源访问不到.(之前可以的): 解决: 首先查看nginx ...
- 在vue项目中添加全局提示框
1.写一个提示框组件:msg.vue (注明:这里用两个div的原因是成功和失败的提示不能用同一个div,因为他们可能紧接着出现,所以不能从始至终只有一个提示框在工作) 2.写一个调用此组建的js : ...
- 从零开始搭建一个规范的vue-cli 3.0项目
在这一集我们将讲到如何从安装vue-cli开始,到新建一个本地项目,再到vscode中关于eslint的配置,以及本地项目关联公司远程项目的基本操作. 一,初始化本地项目 1,首先,全局安装vue-c ...
- Asp.Net Core微服务初体验
ASP.Net Core的基本配置 .在VS中调试的时候有很多修改Web应用运行端口的方法.但是在开发.调试微服务应用的时候可能需要同时在不同端口上开启多个服务器的实例,因此下面主要看看如何通过命令行 ...
- Redis Cluster搭建高可用Redis服务器集群
一.Redis Cluster集群简介 Redis Cluster是Redis官方提供的分布式解决方案,在3.0版本后推出的,有效地解决了Redis分布式的需求,当一个节点挂了可以快速的切换到另一个节 ...
- PHP进程信号处理
PHP进程信号处理 php有一组进程控制函数PCNTL,使得php能在*nix系统中实现跟c一样的创建子进程.使用exec函数执行程序.处理信号等功能. 注意:pcntl这个扩展仅在cli/cgi模式 ...
- centos安装jenkins
1.安装jdk yum install java java -version 2.安装jenkins 添加Jenkins库到yum库,Jenkins将从这里下载安装. wget -O /etc/yum ...
- Basic Linux Privilege Escalation
(Linux) privilege escalation is all about: Collect - Enumeration, more enumeration and some more enu ...
- SAP HUM 拆包之后的HU号码依旧存在
比如HU 194811210666,已经被执行了Unpack操作. HUMO看这个HU号码, 执行, 可以发现,这个HU是空的,里面什么都没有. 双击HU号码,进入HU显示界面, 系统状态竟然是PHE ...
- 我的世界 ParaCraft 结合开源地图 OpenStreetMap 生成3D校园的方法简介
我的世界ParaCraft结合开源地图OpenStreetMap生成3D校园的方法简介 版本1.0 日期2019.2.3 作者Ray (82735589@qq.com) www.TimeGIS.com ...