zoukankan      html  css  js  c++  java
  • MongoDB

    1.介绍及spring boot操作

    介绍:https://blog.csdn.net/yanpenglei/article/details/79261875

    操作:https://www.jianshu.com/p/fdd7e303dff1

    spring boot注解介绍:https://cloud.tencent.com/developer/article/1384034

    2.概念

    3.命令

    3.1 基础命令

    show dbs;           #展示所有数据库
    use dbname;          #切换数据库
    db;              #展示当前数据库名称
    show collections;      #展示当前数据库所有的集合名称
    db.collectionName.find();  #展示collectionName集合下所有记录
    

    3.2 数据库操作

    db.collectionName.insert({records});  #向不存在的库中新建一个集合插入一条数据即可新建一个数据库
     
     db.dropDatabase();            #在要删除的库下面执行该命令,即可删除该库
    

    3.3 集合操作

    3.3.1 创建集合

    db.createCollection(name, options)    #创建集合
    例如:
    db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } )
    

    参数说明:

    • name: 要创建的集合名称

    • options: 可选参数, 指定有关内存大小及索引的选项

    options 可以是如下参数:

    在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。


    当插入一些文档时,MongoDB 会自动创建集合

    db.mycol2.insert({"name" : "菜鸟教程"})
    

    3.3.2 删除集合

    db.collectionName.drop()
    

    3.4 文档操作

    3.4.1 插入文档

    db.COLLECTION_NAME.insert(document)  
    #若插入的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提示主键重复,不保存当前数据。
    db.COLLECTION_NAME.save(document)  
    #已废弃,新版本可使用insertOne()或者replaceOne()
    

    3.2 版本之后新增

    #向集合插入一个新文档
    db.collection.insertOne(
       <document>,
       {
          writeConcern: <document>
       }
    )
    #向集合插入一个多个文档
    db.collection.insertMany(
       [ <document 1> , <document 2>, ... ],
       {
          writeConcern: <document>,
          ordered: <boolean>
       }
    )
    
    #操作
    #  插入单条数据
    > var document = db.collection.insertOne({"a": 3})
    > document
    {
            "acknowledged" : true,
            "insertedId" : ObjectId("571a218011a82a1d94c02333")
    }
    #  插入多条数据
    > var res = db.collection.insertMany([{"b": 3}, {'c': 4}])
    > res
    {
            "acknowledged" : true,
            "insertedIds" : [
                    ObjectId("571a22a911a82a1d94c02337"),
                    ObjectId("571a22a911a82a1d94c02338")
            ]
    }
    

    3.4.2 修改操作

    **update()方法 **

    # 将匹配到的值都进行修改
    # <multi>属性默认是false(不写就是默认),即每次只修改扫描到的第一条数据;
    # 当为true时,修改所有
    db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
    

    **save()方法 **

    # 将匹配到的值都进行修改
    # <multi>属性默认是false(不写就是默认),即每次只修改扫描到的第一条数据;
    # 当为true时,修改所有
    db.col.save({
        "_id" : ObjectId("5f2374ebb38cdd2108824376"),
        "title" : "MongoDB",
        "description" : "MongoDB 是一个 Nosql 数据库",
        "by" : "Runoob",
        "url" : "http://www.runoob.com",
        "tags" : [
                "mongodb",
                "NoSQL"
        ],
        "likes" : 110
    })
    

    3.4.3 删除操作

    db.collection.remove(
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    )
    

    参数说明:

    • query :(可选)删除的文档的条件。

    • justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。

    • writeConcern :(可选)抛出异常的级别。

    db.col.deleteOne({'title':'MongoDB 教程'});
    db.col.deleteMany({'title':'MongoDB 教程'});
    

    3.4.3 查询操作

    db.collection.find(query, projection)
    
    • query :可选,使用查询操作符指定查询条件

    • projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

    若不指定 projection,则默认返回所有键,指定 projection 格式如下,有两种模式

    db.collection.find(query, {title: 1, by: 1}) // inclusion模式 指定返回的键,不返回其他键
    db.collection.find(query, {title: 0, by: 0}) // exclusion模式 指定不返回的键,返回其他键
    

    _id 键默认返回,需要主动指定 _id:0 才会隐藏

    两种模式不可混用(因为这样的话无法推断其他键是否应返回)

    db.collection.find(query, {title: 1, url: 0}) // 错误
    

    只能全1或全0,除了在inclusion模式时可以指定_id为0

    db.collection.find(query, {_id:0, title: 1, url: 1}) // 正确
    

    MongoDB 与 RDBMS Where 语句比较

    如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

    #若是50<likes<110
    #写法为
    db.col.find({likes: { $lt: 110 ,$gt: 50}})
    

    MongoDB AND条件语句

    db.col.find({key1:value1, key2:value2}).pretty()
    

    MongoDB OR条件语句

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

    MongoDB AND和OR联合使用

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

    MongoDB sort() 方法

    #sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
    db.col.find().sort({_id:1}).limit(1)
    

    ❤️注意:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。

    MongoDB Limit与Skip方法

    skip方法在执行时,会遍历所有数据,一条一条过滤。

    # 以下实例为显示查询文档中的两条记录
    db.col.find({},{"title":1,_id:0}).limit(2)
    #以下实例只会显示第二条文档数据
    db.col.find({},{"title":1,_id:0}).limit(1).skip(1)
    #注意:无论limit是在前面还是后面,skip出现时,skip优先执行
    

    ❤️此外,limit和skip联合使用可以用来分页,但是当数据量大的时候会对性能有一定影响

    官网建议:https://www.cnblogs.com/woshimrf/p/mongodb-pagenation-performance.html#_caption_1

    MongoDB 分页

    # 方法一
    # 查询第一页
    db.col.find().sort({_id:1}).limit("pageSize");
    # 查询之后的页数
    db.col.find().sort({_id:1}).limit("pageSize").skip("pageSize * pageNum");
    

    该方法在数据量大的情况下,性能会有点低,原因由skip方法导致。

    # 方法二
    # 查询第一页
    db.col.find().sort({_id:1}).limit("pageSize");
    # 查询之后的页数
    # 获取每页最后一条记录的_id为lastOneId
    db.col.find({_id:{$gt: lastOneId}}).sort({_id:1}).limit("pageSize") 
    

    3.5 管道操作

    //TODO

    3.6 聚合操作

    //TODO

  • 相关阅读:
    228. Summary Ranges
    324. Wiggle Sort II
    42. Trapping Rain Water
    工作之后
    279. Perfect Squares
    391. Perfect Rectangle
    351. Android Unlock Patterns
    246. Strobogrammatic Number
    [LeetCode] 75. Sort Colors Java
    [Java] 80. Remove Duplicates from Sorted Array II Java
  • 原文地址:https://www.cnblogs.com/kpsmile/p/14173070.html
Copyright © 2011-2022 走看看