[React] 04 - Intro: mongoDB becomes popular
安装:
sudo apt-get install mongodb
安装完毕产生: ls /etc/init.d/mongodb
配置:
vim /etc/mongod.conf
卸载:
sudo apt-get --purge remove mongodb mongodb-clients mongodb-server
Ubuntu 14.14的版本有点老,还是下载安装新版本吧。
1. 默认数据文件夹在/data/db。
2. 先启动服务。
$ ./mongod 2015-09-25T16:39:50.549+0800 I JOURNAL [initandlisten] journal dir=/data/db/journal 2015-09-25T16:39:50.550+0800 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed 2015-09-25T16:39:50.869+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.16 2015-09-25T16:39:51.206+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 3.52 2015-09-25T16:39:52.775+0800 I JOURNAL [initandlisten] preallocateIsFaster=true 7.7
3. MongoDB后台管理 Shell。
$ cd /usr/local/mongodb/bin $ ./mongo MongoDB shell version: 3.0.6 connecting to: test Welcome to the MongoDB shell. ……
4. 或者,MongoDB Compass 图形界面管理工具。
5. 检查 MongoDB 是否成功启动
ps -ef | grep mongod
sudo service mongod stop // 关闭
sudo service mongod restart // 重新启动
来源于:Ubuntu14.04下Mongodb(离线安装方式|非apt-get)安装部署步骤(图文详解)(博主推荐)
举一个例子:
From: https://github.com/yinxin630/fiora/blob/master/server/main.js
const mongoose = require('mongoose'); const fs = require('fs'); const path = require('path'); const app = require('./app'); const config = require('../config/server'); const checkVersion = require('../build/check-versions'); const Socket = require('./models/socket'); const Group = require('./models/group'); const getRandomAvatar = require('../utils/getRandomAvatar');
mongoose.Promise = Promise; // ----> checkVersion(); function createDirectory(directoryPath) { if (!fs.existsSync(directoryPath)) { fs.mkdirSync(directoryPath); } } mongoose.connect(config.database, async (err) => {
if (err) { console.error('connect database error!'); console.error(err); return process.exit(1); } const group = await Group.findOne({ isDefault: true }); if (!group) { const defaultGroup = await Group.create({ name: 'fiora', avatar: getRandomAvatar(), announcement: '欢迎光临Fiora, 这是一个开源/自由的聊天室', isDefault: true, });
if (!defaultGroup) { console.error('create default group fail'); return process.exit(1); } } createDirectory(path.join(__dirname, '../public')); app.listen(config.port, async () => { await Socket.remove({}); console.log(` >>> server listen on http://localhost:${config.port}`); }); });
Ref: NodeJs回调操作Promise化
【不是很懂】
看来很有必要把相关菜鸟教程和异步执行方法过一遍。
Ref: MongoDB 概念解析
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
通过下图实例,我们也可以更直观的了解Mongo中的一些概念:
Ref: MongoDB - 连接
命令行模式
> mongodb://admin:123456@localhost/ > mongodb://admin:123456@localhost/test
更多实例见原链接。
Ref: MongoDB 创建数据库
> use runoob switched to db runoob > db runoob // 当前表,有点git的branch的意思 >
// 然后掺入一些数据才能够show显示出 > db.runoob.insert({"name":"菜鸟教程"}) WriteResult({ "nInserted" : 1 }) > show dbs local 0.078GB runoob 0.078GB test 0.078GB >
Ref: MongoDB 创建集合
> use test switched to db test > db.createCollection("runoob") { "ok" : 1 } > > show collections runoob system.indexes
Ref: MongoDB 插入文档
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
该“表”(集合)插入一行,并查看插入内容。【col是collection的意思】
>db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 })
> db.col.find()
{ "_id" : ObjectId("56064886ade2f21f36b03134"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "菜鸟教程",
"url" : "http://www.runoob.com",
"tags" : [ "mongodb", "database", "NoSQL" ],
"likes" : 100 }
>
或者,定义为一个变量后,再插入。
> document=({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: '菜鸟教程', url: 'http://www.runoob.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }); > db.col.insert(document) WriteResult({ "nInserted" : 1 }) >
Ref: MongoDB 更新文档
通过 update() 方法来更新标题(title)。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) # 输出信息
> db.col.find().pretty() { "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >
如果要修改多条相同的文档,则需要设置 multi 参数为 true。
>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
或者,通过save方法,直接替换掉这一行(document)
>db.col.save({ "_id" : ObjectId("56064f89ade2f21f36b03136"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "Runoob", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110 })
Ref: MongoDB 查询文档
单个键值:
以易读的方式来读取数据,可以使用 pretty() 方法。
> db.col.find().pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
对应关系,帮助理解。
操作 | 格式 | 范例 | RDBMS中的类似语句 |
---|---|---|---|
等于 | {<key>:<value> } |
db.col.find({"by":"菜鸟教程"}).pretty() |
where by = '菜鸟教程' |
小于 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
大于 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
多个键值
多个键(key),每个键(key)以逗号隔开。
- AND
> db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
- OR
>db.col.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 } >
- AND结合OR
>db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty() { "_id" : ObjectId("56063f17ade2f21f36b03133"), "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }