目录
1.数据库增删
1.1数据库创建
数据库创建语法格式:
use DatabaseName
在mongodb中使用use与在mysql中使用use database一致,都是选择需要使用的数据库;不同的是当mongodb中不存在该数据库,那么它会自动创建该数据库;
mongodb中默认的数据库为 test,如果你没有创建新的数据库,那么你所创建的集合将默认存放在 test 数据库中
注意:新建的数据库中,如果没有集合,那么它就是空的数据库,下次重新选择时又会重新创建,如果要保存该数据则请随便插入一个集合;
1.2数据库删除
数据库删除语法格式:
db.dropDatabase()
删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名
下面我们来删除demo数据库,以图片为例
2.集合增删
2.1创建集合
创建集合语法:
db.createCollection(collectionName);
db.createCollection(collectionName, options);
直接使用db.createCollection(collectionName),则集合会使用默认的参数创建指定名字的集合
使用db.createCollection(collectionName, options),则需要手动指定参数,例如:
db.createCollection("demo", {size: 10000, max:10000})
options参数说明:
字段 | 类型 | 描述 |
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。 |
autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数。 如果 capped 为 true,也需要指定该字段。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
2.2删除集合
删除集合语法:
db.collectionName.drop()
删除成功返回true,删除失败返回false;
我们可以通过show tables或show collections来查看已有的集合
3.文档增删改查
3.1查询文档
语法格式:
db.collectionName.find()
db.collectionName.find().pretty() // 格式化显示所有文档
查询所有:
db.collectionName.find()
查询指定条件:
db.collectionName.find({"age":24})
多条件查询:
db.collectionName.find({key:value,key:value,key:value,...})
db.collectionName.find({$or:[{key:value},{key:value},....]})
and查询:
or查询:
and和or查询联合使用:
大小条件语句查询:
操作 | 格式 | 示例 | sql中的类似语句 |
等于 | {<key>:<value> } | db.col.find({"key":"value"}).pretty() | where by = 'key' |
小于 | {<key>:{$lt:<value>}} | db.col.find({"key":{$lt:50}}).pretty() | where likes < 50 |
小于或等于 | {<key>:{$lte:<value>}} | db.col.find({"key":{$lte:50}}).pretty() | where likes <= 50 |
大于 | {<key>:{$gt:<value>}} | db.col.find({"key":{$gt:50}}).pretty() | where likes > 50 |
大于或等于 | {<key>:{$gte:<value>}} | db.col.find({"key":{$gte:50}}).pretty() | where likes >= 50 |
不等于 | {<key>:{$ne:<value>}} | db.col.find({"key":{$ne:50}}).pretty() | where likes != 50 |
3.2创建文档
创建文档语法格式:
db.collectionName.insert(document)
db.collectionName.save(document)
save():如果 _id 主键存在则更新数据,如果不存在就插入数据。该方法新版本中已废弃,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 来代替。
insert(): 若插入的数据主键已存在,则抛出 org.springframework.dao.DuplicateKeyException
异常,提示主键重复,不保存当前数据。
3.2 版本之后新增了 db.collection.insertOne() 和 db.collection.insertMany()
insertOne():
insertMany():
以上是一般的正常插入语句写法,接下来我们玩点高级的,通过不知道大家有主要到我上面插入语句中写的document吗?是的,接下来我们使用document对象插入,展示:
除了我这里用的insertOne()方法你当然也可以使用insert(document)或save(document)
当然你也可以写多个document,然后使用insertMany()插入
语法insertMany([document1,document2,do........])
3.3删除文档
语法格式:
db.collectionName.remove()
删除示例:
需要注意, 直接使用remove()会删除所有的数据,如果只需要删除一条数据那么需要加上remove({},1)
3.4更新/修改文档
语法格式:
db.collectionName.update(<query>,<updatedata>)
db.collectionName.save(document)
详细的介绍属性如图:
参数说明:
query : update的查询条件,类似sql update查询内where后面的。
update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern :可选,抛出异常的级别。
实际上使用的时候没有这么复杂,我们只需要在(<query>,<updatedata>)query中输入条件,在updatedata中输入更新数据即可,例如:
如此更新只会修改一条数据,所以我们需要为他添加另一条参数实现批量修改,如图:
更多实例:
说明 | 语法演示 |
只更新第一条记录 | db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } ); |
全部更新 | db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true ); |
只添加第一条 | db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false ); |
全部添加进去 | db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true ); |
全部更新 | db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true ); |
只更新第一条记录 | db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false ); |
4.其他类型操作
4.1条件操作
- (>) 大于 - $gt
- (<) 小于 - $lt
- (>=) 大于等于 - $gte
- (<= ) 小于等于 - $lte
示例:db.col.find({age:{$gt:100}});
2023/6/29更新:更全的条件操作符
$eq:匹配指定字段值等于给定值的文档。
使用方式:
db.collection.find({ field: { $eq: value } });$ne:匹配指定字段值不等于给定值的文档。
使用方式:
db.collection.find({ field: { $ne: value } });$gt:匹配指定字段值大于给定值的文档。
使用方式:
db.collection.find({ field: { $gt: value } });$gte:匹配指定字段值大于或等于给定值的文档。
使用方式:
db.collection.find({ field: { $gte: value } });$lt:匹配指定字段值小于给定值的文档。
使用方式:
db.collection.find({ field: { $lt: value } });$lte:匹配指定字段值小于或等于给定值的文档。
使用方式:
db.collection.find({ field: { $lte: value } });$in:匹配列表中包含给定值的文档。
使用方式:
db.collection.find({ field: { $in: [value1, value2, ...] } });$nin:匹配列表中不包含给定值的文档。
使用方式:
db.collection.find({ field: { $nin: [value1, value2, ...] } });$exists:匹配包含指定字段的文档。
使用方式:
db.collection.find({ field: { $exists: true } });$regex:使用正则表达式匹配字段值的文档。
使用方式:
db.collection.find({ field: { $regex: "pattern" } });$or:使用逻辑或运算符匹配多个条件的文档。
使用方式:
db.collection.find({ $or: [{ condition1 }, { condition2 }, ...] });$and:使用逻辑与运算符匹配多个条件的文档。
使用方式:
db.collection.find({ $and: [{ condition1 }, { condition2 }, ...] });$not:对给定条件取反。
使用方式:
db.collection.find({ field: { $not: { condition } } });$type:匹配指定字段类型的文档。
使用方式:
db.collection.find({ field: { $type: type } });$elemMatch:在数组字段中进行嵌套查询。
使用方式:
db.collection.find({ arrayField: { $elemMatch: { condition } } });$size:匹配数组字段长度等于给定值的文档。
使用方式:
db.collection.find({ arrayField: { $size: value } });
4.2类型操作
类型 | 对应数字 |
---|---|
Double | 1 |
String | 2 |
Object | 3 |
Array | 4 |
Binary data | 5 |
Object id | 7 |
Boolean | 8 |
Date | 9 |
Null | 10 |
示例:db.col.find({“name”:{$type:2}})或db.col.find({“name”:{$type:'string'}});
4.3分页查询
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
示例:db.collectionName.find().limit(NUMBER)
除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
示例:db.collectionName.find().limit(NUMBER).skip(NUMBER)