1.数据库
创建数据库
- 查看数据库:show dbs
- 创建数据库:use ${dbName}(PS:可重复执行当前命令,如果已存在也不会报错,不会重写)
- 查看当前使用的数据库:db(PS:刚创建的数据库里面没有数据,因此在show dbs返回的列表中不存在,需要存入数据才会显示)
删除数据库
- 查看当前使用的数据库:db
- 删除当前使用数据库:db.dropDatabase()
2.集合
创建集合
命令格式:db.createCollection(name, options)
- name:集合名称
- options: 创建集合参数
options包含以下参数
字段 | 类型 | 描述 |
---|---|---|
capped | 布尔 | (可选)如果为 true,则创建固定集合,固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档,注意:如果该值为 true,则必须指定 size 参数 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数,如果 capped 为 true,则需要指定该字段 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量 |
命令示例:
- 创建集合:db.createCollection(“nbaplayer”)
- 查看当前数据库全部集合:show collections
通常来讲不需要我们手动创建集合,因为在我们执行db.${collectionName}.insert(具体文档内容)命令以后,如果集合不存在,mongo服务器会帮我们自动创建集合
删除集合
命令格式:db.${collcetionName}.drop()
在 MongoDB 中,可以使用 drop() 方法来从数据库中删除指定集合,它会从数据库中完全删除一个集合,并且不会留下与已删除集合关联的任何索引。删除成功返回true,删除失败返回false
- db.${collcetionName}.drop()
- show collcetions
3.文档
插入文档
mongo中插入文档存在两种命令
- _id不存在创建,存在则覆盖:db.$(collectionName).save(具体文档内容)
- _id不存在创建,存在抛出org.springframework.dao.DuplicateKeyException 异常:db.$(collectionName).insert(具体文档内容)
示例:
- db.test.insert([{“name”:”ftc”},{“name”:”skx”}])
再次执行插入语句后,抛出主键冲突异常
- db.test.save({“_id”:”62c90ff689bfb486353799cd”,”name”:”ftcupdate”})
如图:并未抛出异常,而是进行了值覆盖
insertOne()、insertMany()指令请参考链接
查找文档
命令格式
mongo中使用find()命令来进行文档结果的非格式化查询,具体指令
- 查询一个或多个:db.${collectionName}.find(query, projection)
- 查询一个: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) |
逻辑操作符
- 与(AND):db.collection_name.find({$and:[{
: }, { : }], …})(PS:其中$and可以省略) 或(OR):db.collection_name.find({$or:[{
: }, { : }]}) 格式化操作
db.${collectionName}.find(query, projection).pretty()
其中.pretty()为格式化查询结果方法。因为文档的持久化格式为bson。因此如果想要查询结果返回时为格式化之后的json形式,可以使用此方法示例
先存入测试数据
db.test.insert([{“name”:”ftc”,”age”:12},{“name”:”skx”,”age”:19},{“name”:”wqw”,”age”:22},{“name”:”gn”,”age”:18},{“name”:”mm”,”age”:3}])
[
{
"name":"ftc",
"age":12
},
{
"name":"skx",
"age":19
},
{
"name":"wqw",
"age":22
},
{
"name":"gn",
"age":18
},
{
"name":"mm",
"age":3
}
]
- 等值查询
查询名称=ftc的记录:db.test.find({“name”:”ftc”})
- 小于或小于等于查询
查询年龄<4的记录:db.test.find({"age":{$lt:4}})
查询年龄<=18的记录:db.test.find(“age”:{$lte:18})
- 大于或大于等于查询
查询年龄>20的记录:db.test.find({“age”:{$gt:20}})
查询年龄>=18的记录:db.test.find(“age”:{$gte:18})
- 不等于查询
查询年龄!=22的记录:db.test.find({“age”:{$ne:22}})
- in查询
查询年龄=12,19,18的记录:db.test.find({“age”:{$in:[12,19,18]}})
- not in查询
查询年龄!=12,19,18的记录:db.test.find({“age”:{$nin:[12,19,18]}})
- and查询
查询查询年龄=12,19,18并且名字=skx的记录:db.test.find({“age”:{$in:[12,19,18]},”name”:”skx”})
- or查询
查询名字=skx或者名字=wqw的记录:db.test.find({$or:[{“name”:”skx”},{“name”:”wqw”}]})
- and与or查询结合
查询查询年龄=12,19,18并且(名字=skx或名字=gn)的记录:db.test.find({“age”:{$in:[12,19,18]},$or:[{“name”:”skx”},{“name”:”gn”}]})
- 查询单条记录
- 存入一条年龄=12的文档:db.test.insert({“name”:”马冬梅”,”age”:12})
- 查询年龄=12的一条记录:db.test.findOne({“age”:12})
- 格式化查询记录
查询年龄=12的记录并格式化结果:db.test.find({“age”:12}).pretty()
至于为啥没有格式化,可能是我的命令行工具的问题吧,哈哈哈哈
- 指定返回键值对
查询年龄>4的记录,并且只返回name和age字段:
db.test.find({“age”:{$gt:4}},{“_id”:0,”name”:1,”age”:1}) (PS:0代表不展示,1代表展示)
更新文档
命令格式
更新文档存在以下两种命令格式:
- db.${collectionsName}.update(
, , { upsert: , multi: , writeConcern: })
参数说明:
- query:条件操作符,与查询命令一致
- update:更新属性,理解为关系型数据库中的set
- upsert:非必填,默认值为 false,用来定义当要更新的记录不存在时,是否当作新记录插入到集合中,当值为 true 时表示插入,值为 false 时不插入
- multi:非必填,默认值为 false,用来表示只更新找到的第一条记录,当值为 true 时,则把按条件查出来的多条记录全部更新;
- writeConcern:非必填,用来定义抛出异常的级别。
- db.${collectionsName}.save(
,{ writeConcern: })
参数说明:
- 单条更新名称=ftc的记录年龄为100:db.test.update({“name”:”ftc”},{$set:{age:100}})
- 批量更新年龄=12的记录名称为ftcftcftc:db.test.update({age:12},{$set:{name:”ftcftcftc”}},{multi:true})
- 使用save根据主键ID更新: db.test.save({ “_id” : ObjectId(“62c9326e01372d9d4d08b793”), “name” : “夏洛”, “age” : 33 })
删除文档
命令格式
db.collection_name.remove(
参数说明:
- query:条件操作符,与查询一致
- justOne:非必填参数,默认false,删除符合条件的所有数据。=true时,只删除一条数据
-
示例
删除名称=夏洛的记录:db.test.remove({name:”夏洛”})
- 删除年龄=22的一条记录:db.test.remove({age:22},{justOne:true})
- 全部删除,清空集合:db.test.remove({})