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. vue里如何灵活的绑定class以及内联style

    在我们平常的前端开发中少不了对DOM的操作,以及样式的动态控制,那我们在使用vue的时候该如何灵活的绑定class呢 1.最简单一个class绑定 v-bind:class设置一个对象,可以动态地切换 ...

  2. Asp.Net Core WebAPI使用Swagger时API隐藏与分组

    1.前言 为什么我们要隐藏部分接口? 因为我们在用swagger代替接口的时候,难免有些接口会直观的暴露出来,比如我们结合Consul一起使用的时候,会将健康检查接口以及报警通知接口暴露出来,这些接口 ...

  3. java的spi 的简单应用

    1.什么是java的spi SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制. 目前有不少框架用它来做服务的扩展发现, 简单来说,它就是一 ...

  4. XSS 绕过技术

    XSS Cross-Site Scripting(XSS)是一类出现在 web 应用程序上的安全弱点,攻击者可以通过 XSS 插入一 些代码,使得访问页面的其他用户都可以看到,XSS 通常是可以被看作 ...

  5. EF基于方法的查询语法

    实体框架(Entity Framework )是 ADO.NET 中的一套支持开发面向数据的软件应用程序的技术. LINQ to Entities 提供语言集成查询 (LINQ) 支持,它允许开发人员 ...

  6. Spring Cloud中Feign如何统一设置验证token

    代码地址:https://github.com/hbbliyong/springcloud.git 原理是通过每个微服务请求之前都从认证服务获取认证之后的token,然后将token放入到请求头中带过 ...

  7. Java笔记(day7-day8)

    this关键字: (1)this(当局部变量和成员变量重名时,可以用关键字this区分)    this代表对象,当前对象       this就是所在函数所属对象的引用      简单来说,哪个对象 ...

  8. web前端图片上传(3)--filereader

    这篇文章主要是为了介绍一种文件上传的方式.当然文件中是包含图片的.如果大家仔细看我的第一篇web前端图片上传(1)就会知道,其实也是按照这种方式上传你的,但是由于上次时间比较紧张,没有详细的介绍今天的 ...

  9. wordpress主题

    1.创建wordpress主题:在themes文件下建立新主题black文件夹 2.在black文件夹中放入index.php和style.css文件,其中index对style.css文件的引用 & ...

  10. 五分钟读懂UML类图(转)

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...