一、数据库增删改查(库)(集合---表,文档--行,字段--列)

1、选择和创建数据库(增)

use 数据库名称

事例:创建spit数据库(如果有就选择、没有就创建)

use spitdb

2、删除数据库(删)

db.dropDatabase();#删除数据库

3、修改数据库(改)

 方法一:  拷贝数据库后,删除原来的数据库

db.copyDatabase('old_name', 'new_name'); 
use old_name 
db.dropDatabase();

   方法二: 利用renameCollection命令、    如果有多个集合,循环处理

db.adminCommand({renameCollection: "db1.test1", to: "db2.test2"})

03.MongoDB常用命令

4、查看数据库和集合(查)

show dbs #查看数据库

二、集合的增删改查(表)

1、创建集合(增)

db.集合名称.insert(数据);

2、删除集合(删)

db.t_member.drop();#删除集合不仅删除集合的文档,也会删除集合本身,同时也会删除在集合上创建的索引。

对比:

db.spit.remove({})#remove用于将集合中的文档删除,但不删除集合本身,也不删除集合的索引。

3、修改集合(改)

同数据库

3、查询集合(查)

show collections #查看集合

 三、集合文档的增删改查(行)

1、创建集合并插入文档(增)

语法:创建集合并插入文档

db.集合名称.insert(数据);

事例:

db.spit.insert({content:"听力测试",userid:"1011",nickname:"肉丝",visits:NumberInt(902)})

03.MongoDB常用命令

注:

mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题了

 2、删除集合文档(删)

语法:

db.集合名称.remove(条件)

事例:

db.t_member.remove({age:1}) #删除满足条件的第一条只删除数据不删除索引

db.spit.remove({})#remove用于将集合中的文档删除,但不删除集合本身,也不删除集合的索引。

db.spit.remove({visits:2000})#删除visits=2000的记录


3、修改集合文档(改、实际是改文档里的字段)

(1)、语法:(不建议使用)

db.集合名称.update({条件},{修改后的数据}) //最好不要用

事例:修改_id为1的记录,浏览量为2000,输入以下语句:

db.spit.update({_id:"1"},{visits:NumberInt(2000)})

03.MongoDB常用命令

发现,这条文档除了visits字段其它字段都不见了,为了解决这个问题,我们需要使用修改器$set来实现

(2)、语法:(建议使用)

db.集合名称.update({条件},{$set:{修改后的数据}}) //使用这个

事例:

db.spit.update({_id:"2"},{$set:{visits:NumberInt(2000)}})#不会影响其他属性列,主键冲突会报错

db.集合名称.update({条件},{$set:{修改后的数据}},true)
#第三个参数为true则执行insertOrUpdate 操作,查询出则更新,没查出则插入

(3)、批量更新字段(字段--列)

db.t_member.update({name:"lisi"},{$set:{name:"lisi11"}},false,true);

 批量操作需要和选择器同时使用,第一个false 表示不执行insertOrUpdate 操作,第二个true 表示执行批量

 (4)、更新器$set、$inc、$unset、$push、$pushAll、$addToSet、$pop、$pull、$、$each

$set : 指定一个键值对,若存在就进行修改,不存在则添加

$inc :只使用于数字类型,可以为指定键值对的数字类型进行加减操作:

db.t_member.update({name:"zhangsan"},{$inc:{age:2}})#执行结果是名字叫“zhangsan”的年龄加了2

$unset : 删除指定的键:

db.t_member.update({name:"zhangsan"},{$unset:{age:1}})

$push : 数组键操作:

1、如果存在指定的数组,则为其添加值;
2、如果不存在指定的数组,则创建数组键,并添加值;
3、如果指定的键不为数组类型,则报错;

db.students.update({ _id: 1 },{ $push: { scores: 89 } })#添加89到scores字段中

$pushAll : 追加多个值到一个数组字段内

db.t_member.update({name:"zhangsan"},{$pushAll:{classes:["English","Math","Chinese"]}});

$addToSet : 当指定的数组中有这个值时,不插入,反之插入

db.t_member.update({name:"zhangsan"},{$addToSet:{classes:"English"}}); #则不会添加到数组里

$pop:删除指定数组的值,当value=1 删除最后一个值,当value=-1 删除第一个值

db.t_member.update({name:"zhangsan"},{$pop:{classes:1}}) #删除了最后一个值

$pull : 删除指定数组指定的值

db.persons.update({name:"zhangsan"},{$pull:{classes:"Chinese"}}) #$pullAll 批量删除指定数组
db.t_member.update({name:"zhangsan"},{$pull:{classes:["Chinese"]}})#若数组中有多个Chinese,则全删除

$addToSet 与$each 结合完成批量数组更新操作

db.t_member.update({name:"zhangsan"},{$set:{classes:{$each:["chinese","art"]}}})

$ : 修改指定数组时,若数组有多个对象,但只想修改其中一些,则需要定位器:

db.t_member.update({"classes.type":"AA"},{$set:{"classes.$.sex":"male"}})

(5)、runCommand 函数和findAndModify 函数

runCommand 函数可执行mongdb 中的特殊函数、findAndModify 就是特殊函数之一,用于返回执行update 或remove 后的文档

语法: 

runCommand({
findAndModify:"persons",
query:{查询器},
sort:{排序},
update:{修改器},
new:true 是否返回修改后的数据
});

事例:

ps=db.runCommand({
findAndModify:"persons",
query:{name:"zhangsan"},
update:{$set:{name:"lisi"}},
new:true
})
ps.value

 

4、查询集合文档(查)

语法:

db.集合名称.find(条件)
db.集合名称.findOne(条件)

事例:查询spit集合的所有文档,我们输入以下命令

db.spit.find()
或
db.spit.find({})

 注:

这里你会发现每条文档会有一个叫_id的字段,这个相当于我们原来关系数据库中表的主键,
当你在插入文档记录时没有指定该字段,MongoDB会自动创建,其类型是ObjectID类型。
如果我们在插入文档记录时指定该字段也可以,其类型可以是ObjectID类型,也可以是MongoDB支持的任意类型。
可以输入以下测试:
db.spit.insert({_id:"4",content:"坚持就是胜利",userid:"1014",nickname:"诺诺",visits:NumberInt(1223)});

事例:按条件来查询

db.spit.find({userid:'1013'})
或
db.spit.find({userid:"1013"})

事例:返回符合条件的第一条数据

db.spit.findOne({userid:'1013'})

事例:查询排序

db.spit.find().sort({userid:-1,visits:1})

注:1代表正序、-1代表倒序

四、高级查询

1、查询所有数据

2、条件查询

3、包含查询(只针对数组)

包含与不包含$in或$nin

3、比较查询

4、$or查询

5、正则表达式

6、$not的使用

7、$all与index使用

8、$size的使用、不能与比较查询符同时使用

9、$slice操作符返回文档中指定数组的内部值

10、文档查询

11、分页与排序

12、游标

13、查询快照

14、查询点(*,*)

15、Count+Distinct+Group使用

五、其它命令

1、查询服务器版本号和主机操作系统 >db.runCommand({buildInfo:1})

2、查询执行集合的详细信息,大小,空间,索引等>db.runCommand({collStats:"persons"})

3、查看操作本集合最后一次错误信息>db.runCommand({getLastError:"persons"})

4、创建一个新的固定集合要求大小是100 个字节,可以存储文档10 个
>db.createCollection("mycoll",{size:100,capped:true,max:10})

5、把一个普通集合转换成固定集合
>db.runCommand({convertToCapped:"persons",size:1000})

6、对固定集合反向排序,默认情况是插入的顺序排序
>db.mycoll.find().sort({$natural:-1})

固定集合:

固定集合默认是没有索引的就算是_id 也是没有索引的
由于不需分配新的空间他的插入速度是非常快的
固定集合的顺是确定的导致查询速度是非常快的
最适合就是日志管理

 

相关文章:

  • 2021-07-30
猜你喜欢
  • 2021-11-30
  • 2021-11-23
  • 2022-01-05
  • 2021-10-18
相关资源
相似解决方案