一、序言

好久没写博客了,这次主要聊聊 node 和 mongoDb 。 先说明一下技术栈  node + express + mongoose + mongoDb。这篇博客,主要讲述 mongoDb 的下载 、安装 、 配置 、 运行 以及如何在 node 项目中引入 mongoose 并 链接 mongoDb 操作数据库,最后再附带几个简单 创建 数据库、集合、域的实例。

二、目录

  1、 下载、安装 mongoDb

  2、 配置、运行 mongoDb

  3、 node项目中 链接 mongoDb

  4、 node项目中对 mongoDb 实现 数据库 集合 域的创建、编辑等操作

三、下载、安装 mongoDb

官方下载链接: https://www.mongodb.com/download-center#community
下载 Windows 64-bit x64 msi 格式的,完事直接傻瓜式安装。或者你也可以选择 customs 自定义安装,去选择一些路径啥的

四、配置、运行 mongoDb

在任意没有中文的目录下新建文件夹,如c:\data,在文件夹下存放MongoDB数据库文件与日志文件,如:   ps: 当然你也可以不配置

  c:\dbData\db用于存放mongodb的数据文件

  c:\dbData\log用于存放mongodb的日志文件
 
创建配置文件

  打开MongoDB的安装目录如“C:\Program Files\MongoDB\Server\4\bin”,并在此目录下新建一个mongo.config文件,文件内容如下:
##数据库目录##
dbpath=C:\dbData\db ##日志输出文件##
logpath=C:\dbData\log\db.log

  在当前目录下,即 bin 目录下 打开命令行  输入 mongod --config "C:\Program Files\MongoDB\Server\4\bin\mongo.config" --install   回车

添加环境变量

  在计算机->属性->高级设置->环境变量->系统变量->Path 中加入"C:\Program Files\MongoDB\Server\4\bin"路径。

  然后在 bin 目录下  双击  mongo.exe 启动 MongoDB 服务

然后命令行 net start mongodb 就OK了

五、node项目中 链接 mongoDb

  比较简单,代码如下:

const mongoose = require('mongoose');

mongoose.connect('mongodb://localhost/mongodb');
mongoose.connection.on('connected', function(e) {
console.log('connect success');
});
mongoose.connection.on('error', function(err) {
console.error('MongoDB connection error: ' + err);
process.exit(1);
});
mongoose.Promise = Promise;

  直接connect最简单的链接, MONGODB://IP:端口号/数据库名称, 注意格式和位置,mongoose 会判断,有这个数据库会直接连接,没有的话,会创建,再连接。connection.on 绑定上连接成功/失败的回调函数,直观的的告诉我们有没有连接成功。如果失败,检查IP和端口号,再检查MongoDB服务是否真的启动了。

  connect参数很多,一般项目中还是需要配置一下的,这个根据大家具体项目来配置了。比如:

module.exports = {
production: {
uri: 'mongodb://localhost/db',
option: {
autoIndex: true,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 1000,
poolSize: 10,
bufferMaxEntries: 0
},
},
development: {
uri: 'mongodb://localhost/db-dev',
option: {
autoIndex: true,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 1000,
poolSize: 10,
bufferMaxEntries: 0
},
},
test: {
uri: 'mongodb://localhost/db-test',
option: {
autoIndex: true,
reconnectTries: Number.MAX_VALUE,
reconnectInterval: 1000,
poolSize: 10,
bufferMaxEntries: 0
},
}}[process.env.NODE_ENV || 'development']

这样就连接好了。

六、node项目中对 mongoDb 实现 数据库 集合 域的创建等操作

  以上步骤我们就已经成功安装了MongoDB,并在node项目中成功连接 MongoDB 了,而且 mongodb://localhost/db   这个db就是你的数据库名称,在链接的时候,就已经将数据库建好了,接下来是对集合和域的创建。

直接举个例子:

  新建一个 MongoDB 的集合

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ObjectId = Schema.ObjectId; const schema = new Schema({
name: { type: String, default: '' }, // 数据名称
data: { type: String, default: '' }, // 数据内容
createTime: { type: Date, default: Date.now },
}) module.exports = mongoose.model('SaveDate', schema);

  写 api 对集合进行操作

const express = require('express');
const router = express.Router();
const mongoose = require('mongoose');
const SaveDate = require('../../models/saveDate.mongo')
router.post('/test/saveData', async (req, res, next) => {
const body = req.body;
try {
if (!body.name){
res.status(400).json({
msg: 'name is required'
});
}else if (!body.data){
res.status(400).json({
msg: 'data is required'
});
}else {
const saveDate = await SaveDate.create({
name: body.name,
data: JSON.stringify(body.data)
});
res.json({
status: true,
saveDate,
});
} }catch (e) {
console.log(e)
res.status(500).json({
status: false,
error: e,
});
}
});
 mongoose.model   Mongoose创建集合指令,他的参数是集合名称,以及一个Schema。将Schem映射到当前新建的集合中。也就是我们所谓的创建表啦。
 mongoose.Schema  Mongoose创建数据Schema指令,存放数据、定义数据类型。这个就是我们在sql里面 定义表中字段

通过这2步,就算新建好一个集合了,但是现在他是没数据的,接下来需要对集合进行 增删改查 的操作。
//集合中添加数据
const saveDate = await SaveDate.create({
name: body.name,
data: JSON.stringify(body.data)
});
// 查找集合的数据
const list = await SaveDate.find(condition).skip(pageSize * (current - 1)).limit(pageSize);
// 更新集合数据
await Instruction.update({ _id: body._id }, {
$set: set
});
// 删除集合数据
await Instruction.remove({ _id: body._id });
 
以上是最基础的 增、删、改、查 指令,至于更加详细的 Mongoose 指令,这里就不详说了。根据你的需要现在已经实现最基础的操作数据库操作了。

七、 小结

这一套 node + express + Mongoose + MongoDB 技术栈,当中对 数据库 的操作部分就到此结束了。下面稍微总结一下,流程大致如下:     首先下载、安装、配置、启动 MongoDB 服务
     然后,运行node服务,并在代码中配置、连接MongoDB服务
     最后,在 api 中,对集合进行操作 注: 差点忘记了,最后给大家安利一个 MongoDB 的桌面化软件,简单实用,官方下载链接: https://robomongo.org/download
数据库还是有可视化工具方便。   这篇博客讲的不深,主要是给初学者提供一个学习 node + MongoDB 自己搭建api服务的学习方向。我刚开始接触到时候没少走弯路。希望这篇文章能帮到大家。
  
博主热衷于向大家推送前端入门知识,喜欢的童鞋可以关注一下! ps:还有其他不错的博客,希望大家有好的代码我们可以一起讨论。

 

 

详解node + mongoDb(mongoDb安装、运行,在node中连接、增删改查)的更多相关文章

  1. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  2. 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html

  3. SpringBoot整合MongoDB JPA,测试MongoRepository与MongoTemplate用法,简单增删改查+高级聚合

    源码 地址 -> https://github.com/TaoPanfeng/case/tree/master/04-mongo/springboot-mongo 一 引入依赖 <depe ...

  4. MySQL数据库安装,MySQL数据库库的增删改查,表的增删改查,表数据的基本数据类型

    一 MySQL的安装 MySQL现在属于甲骨文公司,所以和java语言匹配度较高,同时甲骨文公司的另一种数据库为Oracle,两者同为关系型数据库,即采用关系模型来组织数据,以行和列的方法来存储数据的 ...

  5. 使用MongoDB.NET 2.2.4驱动版本对 Mongodb3.3数据库中GridFS增删改查

    Program.cs代码如下: internal class Program { private static void Main(string[] args) { GridFSHelper help ...

  6. Mongodb的基本操作-数据库 集合 文档的增删改查

    数据库操作: //查看有哪些数据库 > show dbs local  0.078GB mydb   0.078GB //use操作将切换到一个数据库 如果数据库存在将直接切换 如果不存在 那么 ...

  7. MongoDB 表(集合) 创建删除、数据增删改查

    MongoDB 表(集合) 创建删除和增删改查数据 创建一个集合(emp) 在创建集合之前先使用use xxx,选择数据库,如果没有会创建(并不是真正的创建,只有在数据库里面保存集合数据之后才能够真正 ...

  8. MySQL安装及初级增删改查一

    学习MYsql 是参照这个维C果糖的总结,学习目录网址:https://blog.csdn.net/qq_35246620/article/details/70823903,谢谢大神的无私分享. 一. ...

  9. Node.js、express、mongodb 入门(基于easyui datagrid增删改查)

    前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...

随机推荐

  1. day06 字典、元组、set的方法及常用操作

    今日内容: 1.深浅拷贝 2.元组 3.字典 4.set 1.深浅拷贝 # 1.值拷贝 # 采用赋值的方法进行 # 只会将堆区容器变量与栈区的绑定关系进行复制 # 2.浅拷贝 # 会将堆区与栈区的绑定 ...

  2. 20175315 《Java程序设计》第6周学习总结

    20175215 <Java程序设计>第6周学习总结 教材学习内容总结 第七章主要讲的是内部类,匿名类,异常类等等. 内部类:Java支持在一个类中定义另一个类,称作内部类,包含内部类的类 ...

  3. NB-IoT有三种部署方式及特点【转】

    转自:http://blog.sina.com.cn/s/blog_13ddf053f0102wcbz.html NB-IoT有三种运营模式,一种是独立的在运营商的网络外面重做:第二种是在LTE的保护 ...

  4. redis缓存雪崩、缓存穿透、数据库和redis数据一致性

    一.缓存雪崩 回顾一下我们为什么要用缓存(Redis):减轻数据库压力或尽可能少的访问数据库. 在前面学习我们都知道Redis不可能把所有的数据都缓存起来(内存昂贵且有限),所以Redis需要对数据设 ...

  5. 微信支付errcode:40163,code been used,错误小结

    1.配置时注意,支付平台中的支付授权目录, 注意大小写. 昨天碰到的问题,就是自己跳转时,路径写的全小写.跳转支付页面也能跳转过去,但是log中总是调用两次code,报40163错误.后改成和公总号支 ...

  6. codeforces 813E 主席树

    题意: 一个数列多组询问,每次询问[l,r]中最多能选多少个数字,其中每个数字的出现次数不超过k次 题解: 我们保存对于每个位置上,出现超过k次的位置,那么对于每次询问,我们就变成了查询区间[l,r] ...

  7. eclipse新建工作空间后的常用设置

    1.设置字体 一般主要设置下面三个地方(其他可以按需进行设置): Window->Preferences->(可以直接搜索font)General -> Appearance -&g ...

  8. 我的redis入门之路

    1:操作环境:vmware12 , centOs7 ,redis5.0.3 centOs7安装与下载链接(原文地址): https://blog.csdn.net/qq_42570879/articl ...

  9. css 生成图片添加的十字

    <span class="add" title="继续上传"></span> .add { display: inline-block; ...

  10. 高可用Redis(六):瑞士军刀之bitmap,HyperLoglog和GEO

    1.bitmap位图 1.1 bitmap位图的概念 首先来看一个例子,字符串big, 字母b的ASCII码为98,转换成二进制为 01100010 字母i的ASCII码为105,转换成二进制为 01 ...