废话不多说,直接上步骤
Note: 请确保电脑上安装了mongoDB 以及 Node.js
附上安装的官方文档:
1. mongoDB社区版的Windows,MacOS,Linux的安装 PS: 当前官方最新版为V4.0版,本例子使用版本为V3.6
2. Node.js多平台安装
Note: 如果你已经用心地自行安装了MongoDB, 可以跳过这一节(Node.js默认已经安装)
mongod
看全局是否有该命令:mongod
和mongo
命令可以全局执行. 设置环境变量的方法可自行查阅[手动滑稽]默认大家都已经安装了→_→
各平台配置方案大体相同,仍然可以参考官方文件:mongoDB社区版的Windows,MacOS,Linux的安装
①. 在根目录下创建一个有读写权限的 /data/db/
目录, mongoDB会默认设置此目录为读写目录
②. 使用系统管理者权限sudo
等运行mongod
命令,返回一堆消息,忽略warning, 只要最后一行为[initandlisten] waiting for connections on port 27017
即可,表示数据库系统已经启动
③. 其实上一步已经启动成功了,mongoDB数据库会默认采用27017作为连接端口,当有一份connet
连接或断开时,可以在该终端窗口中看到相关log;当然我们可以手动连接数据库进行读写访问:
开启另一个窗口,运行mongo
指令(注意是mongo
不是mongod
), mongo
指令会默认连接本地的27017端口,并打开MongoDB的shell进行操作。此时你会在上一个终端窗口中看到连接的信息
具体的mongo shell
指令可以查看官方的介绍mongo shell
mongodb
模块当前有很多开源的专为nodejs编写的MongoDB读写插件(例如mongoose
), 不过本例中我们使用mongoDB的官方驱动——MONGODB NODE.JS DRIVER
引入也十分简单,直接在你的本地项目shell中npm install mongodb --save
说明:
首先要明白MongoDB中 db
, collection
, document
的关系
db
: 库。一台机器里可以有多个库
collection
: 集合。其实类似 ‘库表’,一个库里有多个表
document
: 记录。一个表里有多条记录。
#### 举个例子:
章鱼老师要统计 3年E班 的考试成绩,所以
1. 他建了一个库db
,名字叫做 3年E班成绩
2. 各科成绩都要有,所以又建了好几个collection
, 分别叫做 国语,英语,人文,科学
3. 每个成绩单里都记录着每个人的成绩,所以他在每个collection
下面详细记录了每位同学的成绩A:90分,B:60分,c:80分 …, 如果全班有30位同学,则有30条document
是时候上代码了!!!
const MongoClient = require('mongodb').MongoClient
/* 默认 27017; depending on your configuration */
const mongourl = 'mongodb://localhost:27017'
/* a database name. 如果没有,MongoDB会自己创建 */
const dbName = 'Grade_3_Class_4'
MongoClient.connect(mongourl, { useNewUrlParser: true }) //如果不设置{ useNewUrlParser: true }会有warning, 强迫症患者福利
.then(client => {
const db = client.db(dbName)
/* a collection name. 如果没有,MongoDB会自己创建 */
const collectionName = 'English_Grade'
const collection = db.collection(collectionName)
/* 插入几条document */
collection.insertMany([
{ name : 'a', grade: 90 },
{ name : 'b', grade: 60 },
{ name : 'c', grade: 80 }
], function(err, result) {
if (err === null) console.log('success')
});
})
module.exports = db
上述代码将3名同学的成绩录入了一份英语成绩的表中,并将该表存放在一份数据库中
这里根据上述例子背景,简单列出几个常用的操作
collection.inserOne({name: 'X', grade: 0}, function(err, result){}
collection.inserMany([{name: 'X', grade: 0},{name: 'Y', grade: 0}], function(err, result){}
collection.deleteOne({name: 'X', grade: 0}, function(err, result){}
collection.inserMany({}, function(err, result){}
(删除所有)query filter
collection.find({}, function(err, result){}
collection.find({name: 'a', grade: 90}, function(err, result){}
collection.find({name: { $exists: true }}, function(err, result){}
更多操作可以参考官方文档