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<>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}}}}))
原文地址:https://www.cnblogs.com/cqxhl/p/13068872.html