1.数据库

创建数据库

  1. 查看数据库:show dbs

image.png

  1. 创建数据库:use ${dbName}(PS:可重复执行当前命令,如果已存在也不会报错,不会重写)

image.png

  1. 查看当前使用的数据库:db(PS:刚创建的数据库里面没有数据,因此在show dbs返回的列表中不存在,需要存入数据才会显示)

image.png

删除数据库

  1. 查看当前使用的数据库:db
  2. 删除当前使用数据库:db.dropDatabase()

image.png

2.集合

创建集合

命令格式:db.createCollection(name, options)

  • name:集合名称
  • options: 创建集合参数

options包含以下参数

字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合,固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档,注意:如果该值为 true,则必须指定 size 参数
size 数值 (可选)为固定集合指定一个最大值,即字节数,如果 capped 为 true,则需要指定该字段
max 数值 (可选)指定固定集合中包含文档的最大数量

命令示例:

  1. 创建集合:db.createCollection(“nbaplayer”)
  2. 查看当前数据库全部集合:show collections

image.png
通常来讲不需要我们手动创建集合,因为在我们执行db.${collectionName}.insert(具体文档内容)命令以后,如果集合不存在,mongo服务器会帮我们自动创建集合

删除集合

命令格式:db.${collcetionName}.drop()
在 MongoDB 中,可以使用 drop() 方法来从数据库中删除指定集合,它会从数据库中完全删除一个集合,并且不会留下与已删除集合关联的任何索引。删除成功返回true,删除失败返回false

  1. db.${collcetionName}.drop()
  2. show collcetions

image.png\

3.文档

插入文档

mongo中插入文档存在两种命令

  1. _id不存在创建,存在则覆盖:db.$(collectionName).save(具体文档内容)
  2. _id不存在创建,存在抛出org.springframework.dao.DuplicateKeyException 异常:db.$(collectionName).insert(具体文档内容)

示例:

  1. db.test.insert([{“name”:”ftc”},{“name”:”skx”}])

image.png
再次执行插入语句后,抛出主键冲突异常
image.png

  1. db.test.save({“_id”:”62c90ff689bfb486353799cd”,”name”:”ftcupdate”})

如图:并未抛出异常,而是进行了值覆盖
image.png
insertOne()、insertMany()指令请参考链接

查找文档

命令格式

mongo中使用find()命令来进行文档结果的非格式化查询,具体指令

  1. 查询一个或多个:db.${collectionName}.find(query, projection)
  2. 查询一个:db.${collectionName}.findOne(query, projection)

参数说明:

  • query:条件操作符,非必填,使用查询操作符指定查询条件,不填查询全部(默认省略)
  • projection:指定返回键值对集合,非必填,指定返回文档中特定的键值对。查询时若要返回文档中所有键值,只需省略该参数即可(默认省略)

    条件操作符

    | 操作 | 格式 | 范例 | 关系型数据库中的类似语句 | | —- | —- | —- | —- | | == | {:} | db.col.find({“name”:”马冬梅”}) | where name= ‘马冬梅’ | | < | {:{$lt:}} | db.col.find({“age”:{$lt:50}}) | where age< 50 | | <= | {:{$lte:}} | db.col.find({“age”:{$lte:50}}) | where age<= 50 | | > | {:{$gt:}} | db.col.find({“age”:{$gt:50}}) | where age> 50 | | >= | {:{$gte:}} | db.col.find({“age”:{$gte:50}}) | where age>= 50 | | != | {:{$ne:}} | db.col.find({“age”:{$ne:50}}) | where age!= 50 | | in | {:{$in:[, , …]}} | db.col.find({age:{$in:[10,20]}}) | where age in(10,20) | | not in | {:{$nin:[, , …]}} | db.col.find({age:{$nin:[10.20.30]}}) | where age not in(10,20) |

逻辑操作符

  1. 与(AND):db.collection_name.find({$and:[{:}, {:}], …})(PS:其中$and可以省略)
  2. 或(OR):db.collection_name.find({$or:[{: }, {:}]})

    格式化操作

    db.${collectionName}.find(query, projection).pretty()
    其中.pretty()为格式化查询结果方法。因为文档的持久化格式为bson。因此如果想要查询结果返回时为格式化之后的json形式,可以使用此方法

    示例

  3. 先存入测试数据

db.test.insert([{“name”:”ftc”,”age”:12},{“name”:”skx”,”age”:19},{“name”:”wqw”,”age”:22},{“name”:”gn”,”age”:18},{“name”:”mm”,”age”:3}])

  1. [
  2. {
  3. "name":"ftc",
  4. "age":12
  5. },
  6. {
  7. "name":"skx",
  8. "age":19
  9. },
  10. {
  11. "name":"wqw",
  12. "age":22
  13. },
  14. {
  15. "name":"gn",
  16. "age":18
  17. },
  18. {
  19. "name":"mm",
  20. "age":3
  21. }
  22. ]
  1. 等值查询

查询名称=ftc的记录:db.test.find({“name”:”ftc”})
image.png

  1. 小于或小于等于查询

查询年龄<4的记录:db.test.find({"age":{$lt:4}})
查询年龄<=18的记录:db.test.find(“age”:{$lte:18})
image.png

  1. 大于或大于等于查询

查询年龄>20的记录:db.test.find({“age”:{$gt:20}})
查询年龄>=18的记录:db.test.find(“age”:{$gte:18})
image.png

  1. 不等于查询

查询年龄!=22的记录:db.test.find({“age”:{$ne:22}})
image.png

  1. in查询

查询年龄=12,19,18的记录:db.test.find({“age”:{$in:[12,19,18]}})
image.png

  1. not in查询

查询年龄!=12,19,18的记录:db.test.find({“age”:{$nin:[12,19,18]}})
image.png

  1. and查询

查询查询年龄=12,19,18并且名字=skx的记录:db.test.find({“age”:{$in:[12,19,18]},”name”:”skx”})
image.png

  1. or查询

查询名字=skx或者名字=wqw的记录:db.test.find({$or:[{“name”:”skx”},{“name”:”wqw”}]})
image.png

  1. and与or查询结合

查询查询年龄=12,19,18并且(名字=skx或名字=gn)的记录:db.test.find({“age”:{$in:[12,19,18]},$or:[{“name”:”skx”},{“name”:”gn”}]})
image.png

  1. 查询单条记录
  • 存入一条年龄=12的文档:db.test.insert({“name”:”马冬梅”,”age”:12})
  • 查询年龄=12的一条记录:db.test.findOne({“age”:12})

image.png

  1. 格式化查询记录

查询年龄=12的记录并格式化结果:db.test.find({“age”:12}).pretty()
image.png
至于为啥没有格式化,可能是我的命令行工具的问题吧,哈哈哈哈

  1. 指定返回键值对

查询年龄>4的记录,并且只返回name和age字段:
db.test.find({“age”:{$gt:4}},{“_id”:0,”name”:1,”age”:1}) (PS:0代表不展示,1代表展示)
image.png

更新文档

命令格式

更新文档存在以下两种命令格式:

  1. db.${collectionsName}.update(,, { upsert: , multi: , writeConcern: })

参数说明:

  • query:条件操作符,与查询命令一致
  • update:更新属性,理解为关系型数据库中的set
  • upsert:非必填,默认值为 false,用来定义当要更新的记录不存在时,是否当作新记录插入到集合中,当值为 true 时表示插入,值为 false 时不插入
  • multi:非必填,默认值为 false,用来表示只更新找到的第一条记录,当值为 true 时,则把按条件查出来的多条记录全部更新;
  • writeConcern:非必填,用来定义抛出异常的级别。
  1. db.${collectionsName}.save(,{ writeConcern: })

参数说明:

  • document : 文档数据
  • writeConcern :非必填,抛出异常的级别

    示例

  1. 单条更新名称=ftc的记录年龄为100:db.test.update({“name”:”ftc”},{$set:{age:100}})

image.png

  1. 批量更新年龄=12的记录名称为ftcftcftc:db.test.update({age:12},{$set:{name:”ftcftcftc”}},{multi:true})

image.png

  1. 使用save根据主键ID更新: db.test.save({ “_id” : ObjectId(“62c9326e01372d9d4d08b793”), “name” : “夏洛”, “age” : 33 })

image.png

删除文档

命令格式

db.collection_name.remove(, { justOne: ,writeConcern: })
参数说明:

  1. query:条件操作符,与查询一致
  2. justOne:非必填参数,默认false,删除符合条件的所有数据。=true时,只删除一条数据
  3. writeConcern:可选参数,定义抛出异常的级别。

    示例

  4. 删除名称=夏洛的记录:db.test.remove({name:”夏洛”})

image.png

  1. 删除年龄=22的一条记录:db.test.remove({age:22},{justOne:true})

image.png

  1. 全部删除,清空集合:db.test.remove({})

image.png