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
        }
    );
    
  • 相关阅读:
    RHEL6 kernel bug在hadoop上的测试
    Mapreduce报错:Split metadata size exceeded 10000000
    HDFS超租约异常总结(org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException)
    zookeeper ACL使用
    通过Hadoop jmx收集Namenode,Jobtracker相关信息
    FFmpeg + nginx+asp.net实现网络摄像头RTSP视频流WEB端在线播放功能
    JQ+asp.net实现文件上传的断点续传功能
    freemaker模板引擎使用详解
    nginx配置详解
    MySQL数据库分页查询,Oracle数据库分页查询,SqlServer数据库分页
  • 原文地址:https://www.cnblogs.com/gathub/p/mongodb.html
Copyright © 2011-2022 走看看