zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

[React] 04 - Intro: mongoDB becomes popular

MongoDBReact 04 intro
2023-09-27 14:23:24 时间

Ref: Linux平台安装MongoDB - 菜鸟教程

安装:
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
}