• mongodb基本操作及使用


    MongoDB是一个基于分布式文件存储 [1]  的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引​​​​​​​

    创建数据库

    use articledb

    创建集合

    db.createCollection("my")

    查询集合

    show collections

    删除集合

    db.集合.drop()

    db.my.drop()

    集合的增删改查

    1.单个插入,比如我这里向comment放入一条评论表数据

    1. db.comment.insert({
    2. "articleid":"10000","content":"今天天气真好啊,阳光明媚","userid":"1001",
    3. "nickename":"rose","createdatetime":new Date(),
    4. "likenum":NumberInt(10),"state":null
    5. })

    2.查询

    db.comment.find()

    3.插入多个  insertMany()

    1. db.comment.insertMany([{
    2. "articleid":"10001","content":"今天大雾,雾蒙蒙的","userid":"1002",
    3. "nickename":"rose","createdatetime":new Date(),
    4. "likenum":NumberInt(10),"state":null
    5. },{
    6. "articleid":"10002","content":"今天天气真冷,冻死宝宝了","userid":"1003",
    7. "nickename":"rose","createdatetime":new Date(),
    8. "likenum":NumberInt(10),"state":null
    9. }])

    4.条件查询

    db.coment.find(),通过查询方法里面放入json格式的参数,进行条件查询,比如查询userid为1003的评论

    db.comment.find({"userid":"1003"})

    5.投影查询 ,如果只需要查出表部分字段

    db.comment.find({"userid":"1003"},{userid:1,nickename:1,_id:0})

    5 批量插入的时候并不会因为某一条的失败而回滚,所以需要tryCatch

    文档的更新

    文档的更新语法 db.collection.update(query,update,options)

    覆盖的修改

    db.comment.update({userid:"1001"},{likenum:NumberInt(100)})

    执行后我们发现,这条文档除了likenum这个字段,其他的都不见了

     局部修改

    为了解决这个问题。我们需要使用修改器$set 

    db.comment.update({userid:"1002"},{$set:{likenum:NumberInt(100)}})

    文档的删除

    文档的删除语法

    db.集合名称.remove(条件)

    db.comment.remove({_id:ObjectId("6311b7305e41940620ddd71d")});

    分页查询

    查询总数

    db.comment.count({userid:"1002"})

    分页查询,mongdb提供一个skip()

    db.comment.find().limit(2).skip(3);

    排序查询

    sort()方法对数据进行排序,sort方法,可以通过参数指定排序的字段,并使用1和-1指定升序和降序

    db.comment.find().sort({likenum:-1})

    比较查询

    < ,<= ,>,>= 这些操作符也是很常用 

    db.集合名称.find({"field":{ $gt:value}}) //大于:field>value

    db.集合名称.find({"field":{ $lt:value}}) //小于:field

    db.集合名称.find({"field":{ $gte:value}}) //大于等于:field>=value

    db.集合名称.find({"field":{ $lte:value}}) //小于:field<=value

    db.集合名称.find({"field":{ $lte:value}}) //不等于:field !=value

    例如查询评论数大于10的记录

    db.comment.find({likenum:{$gt:NumberInt(10)}})

    包含查询$in操作符

    db.comment.find({userid:{$in:["1001","1002","1003"]}})

    索引的使用

    索引可以提升查询的效率,mongodb支持单字段的索引和复合索引

    1.查看索引

    db.collection.getIndexes()

    1. {
    2. "v" : 2,
    3. "key" : {
    4. "_id" : 1
    5. },
    6. "name" : "_id_",
    7. "ns" : "articledb.comment"
    8. }

    v 表示字段的版本号码

    创建索引

    1.在集合上创建索引

    语法

    db.collection.createIndex(keys,options)

    db.comment.createIndex({userid:1})

    2.复合索引:对于userid和nickname 同时建立符合(Compound)索引

    db.comment.createIndex({userid:1,nickname:-1})

    索引的移除

    db.comment.dropIndex({userid:1})

    查看执行计划 调用explain()

    db.comment.find({userid:"1003"}).explain()

    1. {
    2. "queryPlanner" : {
    3. "plannerVersion" : 1,
    4. "namespace" : "articledb.comment",
    5. "indexFilterSet" : false,
    6. "parsedQuery" : {
    7. "userid" : {
    8. "$eq" : "1003"
    9. }
    10. },
    11. "winningPlan" : {
    12. "stage" : "FETCH",
    13. "inputStage" : {
    14. "stage" : "IXSCAN",
    15. "keyPattern" : {
    16. "userid" : 1
    17. },
    18. "indexName" : "userid_1",
    19. "isMultiKey" : false,
    20. "multiKeyPaths" : {
    21. "userid" : [ ]
    22. },
    23. "isUnique" : false,
    24. "isSparse" : false,
    25. "isPartial" : false,
    26. "indexVersion" : 2,
    27. "direction" : "forward",
    28. "indexBounds" : {
    29. "userid" : [ "[\"1003\", \"1003\"]" ]
    30. }
    31. }
    32. },
    33. "rejectedPlans" : [
    34. {
    35. "stage" : "FETCH",
    36. "inputStage" : {
    37. "stage" : "IXSCAN",
    38. "keyPattern" : {
    39. "userid" : 1,
    40. "nickname" : -1
    41. },
    42. "indexName" : "userid_1_nickname_-1",
    43. "isMultiKey" : false,
    44. "multiKeyPaths" : {
    45. "userid" : [ ],
    46. "nickname" : [ ]
    47. },
    48. "isUnique" : false,
    49. "isSparse" : false,
    50. "isPartial" : false,
    51. "indexVersion" : 2,
    52. "direction" : "forward",
    53. "indexBounds" : {
    54. "userid" : [ "[\"1003\", \"1003\"]" ],
    55. "nickname" : [ "[MaxKey, MinKey]" ]
    56. }
    57. }
    58. }
    59. ]
    60. },
    61. "serverInfo" : {
    62. "host" : "appledeMacBook-Pro.local",
    63. "port" : 27017,
    64. "version" : "4.0.10",
    65. "gitVersion" : "c389e7f69f637f7a1ac3cc9fae843b635f20b766"
    66. },
    67. "ok" : 1
    68. }

    从winningplan的stage为FETCH 就表示命中的索引

  • 相关阅读:
    【数据库】MySQL中的锁机制
    Spring的创建和使用1.0
    MongoDB安装教程
    聊聊Linux 的 Page Cache
    【从零学Python】关于python下划线命名的事儿、enumerate()
    【NVIDIA CUDA】2023 CUDA夏令营编程模型(四)
    【Codeforces】 CF79D Password
    mac 解决 vscode 权限不足问题,Insufficient permissions
    c++ 的map、iterator用法
    mac版Idea快捷键
  • 原文地址:https://blog.csdn.net/qq_31927785/article/details/126664822