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. 深入浅出一下Java的HashMap

    在平常的开发当中,HashMap是我最常用的Map类(没有之一),它支持null键和null值,是绝大部分利用键值对存取场景的首选.需要切记的一点是——HashMap不是线程安全的数据结构,所以不要在 ...

  2. 在linux(centos)系统安装redis教程

    最近在切换服务器操作系统,简单记录一下 一.安装redis 1.检查是否有redis yum 源 yum install redis 2.下载fedora的epel仓库 yum install epe ...

  3. 【Android Studio安装部署系列】六、在模拟器上运行项目

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 在模拟器上运行项目的步骤.不过在实际开发中,一般不采用这种方式,因为影响电脑的运行,所以一般使用真机运行项目. 运行项目 创建模拟器 ...

  4. PopupMenuDemo【popupMenu的简单使用】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 本文主要将PopUpMenu和ToolbarDemo[Toolbar作为顶部导航栏的简单使用]进行搭配使用,实现toolbar的溢出 ...

  5. Python:logging.NullHandler 的使用

    在使用 peewee 框架时,默认是不会出现日志消息的. from peewee import Model, CharField, DateTimeField, IntegerField from p ...

  6. 补习系列(1)-springboot项目基础搭建课

    目录 前言 一.基础结构 二.添加代码 三.应用配置 四.日志配置 五.打包部署 小结 前言 springboot 最近火的不行,目前几乎已经是 spring 家族最耀眼的项目了.抛开微服务.技术社区 ...

  7. web scraper 抓取分页数据和二级页面内容

    如果是刚接触 web scraper 的,可以看第一篇文章. web scraper 是一款免费的,适用于普通用户(不需要专业 IT 技术的)的爬虫工具,可以方便的通过鼠标和简单配置获取你所想要数据. ...

  8. 杭电ACM2018--母牛的故事

    母牛的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. kkkK的随笔

    自我介绍 学号:211606310 姓名:柯伟敏 爱好:篮球,足球 最爱的菜:4堂的饺子 最想说的话:一切都是最好的安排 初入大学 -------------------- 选择 选择软件工程这个专业 ...

  10. sqlsever存储过程配合代理作业自动定时建表

    1.自动建表存储过程 USE [ThreeToOne] GO /****** Object:  StoredProcedure [dbo].[WTO_CreateTable_ScanDoXXX]    ...