mongodb基本操作,CRUD

假设当前有库test,且其中的集合也为test

1、登录mongodb客户端

mongo -uroot -p --authenticationDatabase "admin"

2、查看数据库

show dbs

3、切换/新建数据库(如果库不存在,mongodb会自动创建,但需要库中存在集合,在show dbs的时候才会显示)

use 数据库名称

4、查看当前数据库中集合

show collections

5、插入数据,insertOne只会插入一个文旦个,如果存在多个文档,除第一个外,其他的被舍弃

db.test.insertOne({"key":"val"})

6、插入

db.test.insert({"key":"val","key2":"val2"})

7、插入多条数据

db.test.insertMany([{"key":"val","key2":"val2",...},{"k":"v",...},...])

8、insert方法既可以插入单条数据也可以插入多条数据,插入多条数据时,一定要添加上最外层中括号,否则只会保存第一条数据

db.test.insert([{"key":"val",key2:val2},{"key3":"val3",key4:val4}])

9、根据条件删除数据(如果存在多个符合条件的数据,则也只是删除第一条符合条件数据)

db.test.deleteOne({"key":"val","key2":"val2",...})
db.test.deleteOne({"key":{$eq:"val"},"key2":{$eq:"val2"},...})

类似eq的操作还有很多
https://docs.mongodb.com/manual/reference/operator/query/
10、根据条件删除数据(如果存在多个符合条件数据,则全部删除)

db.test.deleteMany({"key":"val","key2":"val2",...})

或者如上述deleteOne方式使用$eq
11、根据一个key多个值删除

db.test.deleteMany({"key":{$in:["val","val2",...]}})

写成以下方式不正确,最后面的值会覆盖前一个值
db.test.deleteMany({"key":"val","key":"val2"})
12、删除整个集合下文档

db.test.deleteMany({})

13、更新单个文档

db.test.updateOne({"key":"val"},{$set:{"key2":"val2","key3":"val3",...}},{upsert:true})

其中upsert可选值为true/false,当为true时,则表示过滤条件未查询出记录时,将进行插入操作,为false,则不进行插入,但也不会返回错误
或者将updateOne改为update也可以,但updateOne必须使用$set修改参数
不要使用
db.test.update({"key":"val",...},{"key2":"val2",...}),这种方式类似于插入,会将之前的数据清除掉,重新插入数据,唯一不变的是这条记录的_id.
需要谨记的是,如果不需要忽略掉没有修改的数据,一定要使用$set来修改数据。
14、批量更新文档

db.test.updateMany({"key":"val",...},{$set:{"key2":"val2",...}})

同样该操作必须带上$set,否则会提示更新失败
updateMany会更新所有符合过滤条件的记录对应的参数
15、replaceOne

16、查询全部

db.test.find()

17、条件查询

db.test.find({"key":"val","key2":"val2",...})

18、某个条件中包含所有值查询

db.test.find({"key":{$in:["val","val2",...]},...})

19、查询返回指定的列

db.test.find().projection({"key":1,"key2":1})

20、查询时去掉自带的id,在java中想去掉,直接当成普通的列去掉即可

db.test.find({},{_id:0})

21、查询分页

db.test.find().skip(pageNum*pageSize).limit(pageSize)

22、建立单个索引,升序为1,降序为-1

db.test.createIndex({"key":1})

此时将生成一个名为key_1的索引,如果为降序,则索引名称为-1,也可以自己命名索引名称
23、查询某个key对应的记录中的某个字段,其中第一个{}中为查询条件,第二个为查询的列,如果第一个{}中为空,则表明查询所有列中的第二个{}中的字段

db.test.find({"key":"val"},{"showcol1":1},"showcol2":1}).pretty()

24、多条件查询,且有一个条件中参数为字符串
// 查询第二个条件相等

db.test.find({"key":"val","key":{$eq:"val"}},{"showcol":1}).pretty() 

 // 查询第二个条件不等于

db.test.find({"key":"val","key":{$ne:"val"}},{"showcol":1}).pretty()

25、批量修改某个字段值,下面{"_id":item._id}必须带上,否则语法不正确,后者将_id改为其他key也行,但必须得有

db.getCollection('test').find({"key":"val"}).forEach(
  function(item){ 
    db.getCollection('test').update({"_id":item._id},{$set:{"key": "val2"}})
  }
)

26、查询某个字段并且去重复

db.test.distinct("key")

 

上一篇:Java精确计算


下一篇:Oracle中 创建视图的同时新增字段(常用函数:decode,NVL,NVL2)