MongoDB

MongoDB的下载与安装

直接用brew install mongodb是不行的

正确的应该是brew install mongodb-community@4.2,安装的是最新的版本的MongoDB(4.2.6)

mongodb-1

启动:brew services start mongodb-community@4.2

关闭:brew services stop mongodb-community@4.2

可视化工具

可以直接使用navicat来连接mongoDB


mongdb-2

MongoDB操作

Mongo是一个Nosql的数据库
在MongoDB中,集合只有在内容插入后才会创建!就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

创建并使用数据库:use test

查看数据库:db

查看所有数据库,看不到刚刚创建的数据库,要插入一条数据之后才能看见:show dbs

删除数据库:db.dropDatabase()

创建集合:db.createCollection("role")

查看集合:show table/show collections

删除集合:db.role.drop()


向文档中插入数据

db.article.insert({
    title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '弘辉',
    tags: ['mongodb', 'database', 'NoSQL'],
    likes: 100
})

查找命令:db.article.find()

可以把数据定义成一个变量插入

document = ({
    title: 'MongoDB 教程',
    description: 'MongoDB 是一个 Nosql 数据库',
    by: '弘辉',
    tags: ['es', 'database', 'NoSQL'],
    likes: 100
});
db.article.insert(document)

更新文档,但只会修改第一条发现的文档

db.article.update({'title': 'MongoDB 教程'}, {$set: {'title': 'MySql'}})

如果要修改多条文档, multi 参数为 true。

db.article.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})

根据ID修改数据,没有则新增数据

db.article.save({
    "_id": ObjectId("5ebdf6de178ae527e1098113"),
    "title": "MongoDB",
    "description": "MongoDB 是一个 Nosql 数据库",
    "by": "弘辉",
    "tags": [
        "mongodb",
        "NoSQL"
    ],
    "likes": 110
})

删除文档,删除全部符合条件的文档

db.article.remove({'title':'es 教程'})

删除文档,删除第一条符合条件的文档

db.article.remove({'title':'es 教程'},1)

删除文档下全部数据

db.article.deleteMany({})

删除 status=A 的全部文档

db.article.deleteMany({ status : "A" })

删除 status=D的一个文档

db.inventory.deleteOne( { status: "D" } )

删除完数据之后回收磁盘空间

db.repairDatabase()

查询文档,pretty() 方法以格式化的方式来显示所有文档

db.col.find().pretty()

多个条件and查询

db.article.find({"by":"弘辉", "title":"MongoDB 教程"}).pretty()

多个条件or查询

db.article.find({$or:[{"by":"弘辉"},{"title": "MongoDB 教程"}]}).pretty()

or和and联合查询

db.article.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

范围查询

db.article.find({likes : {$gt :100}})               // likes大于150的数据
db.article.find({likes : {$gte : 100}})             // likes大于等于100的数据
db.article.find({likes : {$lt : 150}})              // likes小于150的数据
db.article.find({likes : {$lte : 150}})             // likes小于等于150的数据
db.article.find({likes : {$lt :200, $gt : 100}})    // likes大于100,小于200的数据

模糊查询

db.article.find({title:/教/})      // 包含教字
db.article.find({title:/^教/})     // 以教字开头
db.article.find({title:/教$/})     // 以教字结尾

读取指定数量的数据记录

db.article.find().limit(2)         // 取前两条数据
db.article.find().limit(2).skip(2) // 跳过前两条,取两条数据

排序

db.article.find().sort({"likes":-1})    // 1为升序,-1为降序

创建索引

db.article.createIndex({"title":1})                     // 1为升序,-1为降序
db.article.createIndex({"title":1,"description":-1})    // 设置多个字段索引,关系型数据库称复合索引
db.article.getIndexes()                                 // 查看集合索引
db.article.totalIndexSize()                             // 查看集合索引大小
db.article.dropIndexes()                                // 删除集合索引
db.article.dropIndex({"title":1})                       // 删除集合指定索引

聚合-求和

db.article.aggregate([{$group : {_id: "$by", sum : {$sum : 1}}}])

按字段显示查询结果,默认显示_id,设置为0,则不显示_id

db.article.aggregate(
    {
        $project: {
            _id: 0,
            title: 1,
            by: 1,            
        }
    }
);

match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理

db.article.aggregate([
    {
        $match: {
            likes: {
                $gt: 100,
                $lte: 150
            }
        }
    },
    {
        $group: {
            _id: "$title",
            count: {
                $sum: 1
            }
        }
    }
]);

前面两个文档被过滤掉

db.article.aggregate(
    {
        $skip: 2
    }
);
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260