mongodb crud
mongodb crud学习
插入
insert
- 插入单个
db.users.insert({"name":"jonny","age":25})
- 插入多个
db.users.insert([{"name":"xhl","age":25},{"name":"向洪林","age":25}])
insertOne
db.users.insertOne({"name":"jonny","age":25})
insertMany
db.users.insertMany([{"name":"xhl","age":25},{"name":"向洪林","age":25}])
删除
remove
- 存在条件
db.users.remove({"name":"xhl"})
- 删除所有
db.users.remove({})
注意:删除文档时必须要传递条件,删除所有传递{}对象;remove是shell种的api,而delete是程序中的api
drop
db.users.drop()
注意:drop会将数据和表都删除掉,包括建立的索引
deleteOne
db.users.deleteOne({"name":"xhl"})
官方文档:https://docs.mongodb.com/manual/reference/method/db.collection.deleteOne/
deleteMany
db.users.deleteMany({"age":25})
官方文档:https://docs.mongodb.com/manual/reference/method/db.collection.deleteMany/
修改
update
第一个参数(query)是修改条件,第二个参数(update)是修改的值
db.users.update({"name":"xhl"},{"age":30})})
注意:这里后面update会直接替换掉原来的文档
使用$set
db.users.update({"name":"jonny"},{ $set:{"age":25}})
使用$set会修改特定文档键的值
updateOne
db.users.updateOne({"age":25},{$set:{"name":"test"}})
这里age会筛选出多个,但是只会修改到第一条
updateMany
修改年龄大于25岁的姓名为test
db.users.updateMany({"age":{$gt:25}},{$set:{"name":"test"}})
查询
find
find
类似与关系型数据库中的select
- 单条件查询
db.users.find({"name":"test"})
- 多条件and查询
db.users.find({"name":"test","age":25})
- $and
查找名称为test
并且年龄为25的文档,这里和上面多条件查询一样的效果
db.users.find({$and:[{"name":"test"},{"age":25}]})
- $or
查找名称为test
或者年龄为25的文档
db.users.find({$or:[{"name":"test"},{"age":25}]})
- 正则表达式
匹配name
以t开头的文档
db.users.find({"name":/^t/})
- 逻辑表达式运算
=
db.users.find({"age":25})
<>
(!=)
db.users.find({"age":{$ne:25}})
>
db.users.find({"age":{$gt:25}})
>=
db.users.find({"age":{$gte:25}})
<
db.users.find({"age":{$lt:25}})
<=
db.users.find({"age":{$lte:25}})
与关系型数据库的对照表
SQL | MQL |
---|---|
age=25 | |
age<>25 | {"age":{$ne:25}} |
age>25 | {"age":{$gt:25}} |
age>=25 | {"age":{$gte:25}} |
age<25 | {"age":{$lt:25}} |
age<=25 | {"age":{$lte:25}} |
age=25 AND name='test' | {"age":25,"name":"test"}或{$and:[{"age":25},{"name":"test"}]} |
age=25 OR name='test' | {$or:[{"age":25},{"name":"test"}]} |
age is NULL | {"age":{$exists:false}}(和关系型数据库中exites()类似) |
age IN (25,26,30) | {"age":{$in:[25,26,30]}} |
- 子文档查询
首先插入测试数据
db.users.insert({"name":"jonny","age":25,"company":{"name":"CY","address":"ChongQing"},"claims":["程序猿","工程师","
小白"]})
使用的方式是和js
中一致,使用.
的方式进行查找
db.users.find({"company.name":"CY"})
注意:子文档查询千万不是db.users.find({"company":{"name":"CY"}})使用对象的方式进行查找的
- 数组多个查询$elemMatch
准备测试数据
db.users.insert({"name":"jonny","age":25,"company":{"name":"CY","address":"ChongQing"},"claims":[
{"name":"程序猿","expire":1800,"creation":"2020-06-09"},
{"name":"工程师","expire":3600,"creation":"2020-06-10"},
{"name":"小白","expire":4800,"creation":"2020-06-11"},
]})
查找claims
数组中name
以小开头并且expire
大于1800
db.users.find({"claims":{$elemMatch:{"name":/^小/,"expire":{$gt:1800}}}}))