zoukankan      html  css  js  c++  java
  • 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
        }
    );
    
  • 相关阅读:
    [LeetCode 1029] Two City Scheduling
    POJ 2342 Anniversary party (树形DP入门)
    Nowcoder 106 C.Professional Manager(统计并查集的个数)
    2018 GDCPC 省赛总结
    CF 977 F. Consecutive Subsequence
    Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
    Poj 2337 Catenyms(有向图DFS求欧拉通路)
    POJ 1236 Network of Schools (强连通分量缩点求度数)
    POJ 1144 Network (求割点)
    POJ 3310 Caterpillar(图的度的判定)
  • 原文地址:https://www.cnblogs.com/gathub/p/mongodb.html
Copyright © 2011-2022 走看看