mongodb 中基本概念有: 文档 、 集合 、数据库、数据体系
一.数据库基本操作
1.创建数据库
use database_name
如果数据库不存在,则创建数据库,否则切换到指定数据库。
注意:
(1)刚刚创建的数据库使用show dbs显示不出来,需要插入一些数据才能显示
db.student.insert({
name:"张三",
age:20,
address:"北京"
})
(2)MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
当使用 use database_name的时候. database_name其实存放在内存之中, 当 database_name中存在一个 collection 之后, mongo 才会将这个数据库持久化到硬盘之中.
2、删除数据库
use database_name
db.dropDatabase()
3、查看所有数据
show dbs
4、查看当前正在使用的数据库
db
db.getName()
5、断开连接
exit
quit()
6、查看命令
help
7、查看版本
db.version()
二 .集合(表)操作
1、查看当前数据库所有集合
show collections
2、创建集合
合法的集合名:
a.集合名不能是空字符“”。
b.集合名不能包含\0 字符,这个字符表示的是集合名的结尾。
c.集合名不能以”system.”开头,这是为系统集合保留的前缀。
d.用户创建的集合名字不能包含保留字符,有些驱动程序确实支持集合里面包含保留字符,但是大多数不支持,例如名字中包含 $ ,不要在名字中出现。
(1)、写法一
db.createCollection('student')
(2)、写法二
db.student.insert(
{
name:"张三",
age:20,
address:"北京"
})
db.student.insert(
{
name:"李四",
sex:'男'
})
ps:集合就是一组文档,多个文档组成一个集合,集合类似于sqlserver里面的表。集合是无模式的,是指在同一个集合中可以包含不同格式的文档
区别:两者的区别在于前者创建的是一个空的集合,后者创建一个空的集合并添加一个文档
3、删除当前数据库中的集合
db.student.drop()
三、文档操作
1、插入
(1)使用insert()方法插入文档
插入一个:
db.student.insert(
{
name:"张三",
age:20,
address:"北京"
})
插入多个:
db.student.insert(
[{
name:"张三",
age:20,
address:"北京"
},
{
name:"李四",
sex:'男'
}[
)
注: 如果没有给文档指定 _id 属性, 那么数据库会为文档自动添加 _id field, 就是文档的唯一标识, 类似于sql server 里的 primary key
(2)使用save()方法插入文档*
db.student.insert(
{
_id:1,
name:"熊大",
sex:'男'
})
注: save()有没有指定_id,类似于insert()方法;如果指定_id,_存在则update,否则insert
2、更新
(1)save()方法通过传入的文档替换已有文档
(2)update()方法用于更新已存在的文档
语法:db.集合名称.update({query}, {update}, {multi: boolean})
ᅟᅠ db.集合名称.updateOne({query}, {update})
ᅟᅠ db.集合名称.updateMany({query}, {update})
- query:查询条件,类似于sql里update语句内where后面的内容
- update:update的对象和一些更新的操作符(inc)等,inc在原有的基础上累加后更新
- multi:可选,mongodb默认是false,只更新找到的第一条记录,如果这个参数为true,就按照条件查找出来的数据全部更新
db.student.update(
{name:"熊大", }, {age:10 }
)
//将name='熊大'的数据,全文档进行覆盖更新,只会更新一条数据
db.student.update(
{name:"熊大", }, {$set:{age:10}})
)
//将name='熊大'的数据, 指定键值更新 ,只会更新一条数据
db.student.updateOne(
{name:"熊大", }, {$set:{age:10}})
)
db.student.update(
{name:"熊大", }, {$set:{age:10}},{multi:true})
)
//将name='熊大'的数据, 指定键值更新 ,更新符合查询条件的全部数据
db.student.updateMany(
{name:"熊大", }, {$set:{age:10}})
)
db.student.update(
{name:"熊大", }, {$inc:{age:10}})
)
//将name='熊大'的数据,只会更新指定字段,在原age上累加,如示例,age等于原age+10
使用修改器注意
• $inc :按指定的量递增字段的值(针对的修改的原值是数字)
• $set :修改文档中字段的值 ,如果该字段不存在,则新增该字段
• $unset 从文档中删除指定的字段
• $min 仅当指定值小于现有字段值时才更新字段
• $max 仅当指定值大于现有字段值时才更新字段
• $mul 将字段的值乘以指定的量
• $rename 重命名字段
3、删除
语法: db.集合名.remove({条件}, {justOne: true/false})
ᅟᅠ db.集合名.deleteOne({条件})
ᅟᅠ db.集合名.deleteMany({条件})
db.student.remove({}); // 表示删除集合中所有的数据
db.student.deleteMany({}) // 表示删除集合中所有的数据
db.student.findOneAndDelete({name:"熊大"})//删除一条数据并返回显示被删除的数据
说明:参数justOne:可选, 如果设为true或1,则只删除一条,默认false,表示删除全部
注意:justOne大小写没有注意的话,也是全部删除
4、查询
(1)、简单查询
db.student.find() // 查询集合中所有的数据
db.student.find( { age:10 } ) // 查询集合中符合查询条件所有的数据
db.student.findOne() // 查询匹配结果的第一条数据,效果类似sql server 中的select top 1
db.student.find().limit(3);// 查询匹配结果的前3条数据
db.student.find().skip(2).limit(3);//查询匹配结果的第3个文档到第5个文档
(2)、显示指定列
db.student.find({},{name:1}) ; // 只查询显示 name 键及对应的值信息
db.student.find({},{name:0}) ; // 表示除了name 键值以外不显示,其它的都显示
注:用于限定字段的字典的Key为各个字段名。其值只有两个——0或1
(3)、比较运算符使用
- 等于: 默认是等于判断, 没有运算符
- 小于:$lt (less than)
- 小于等于:$lte (less than equal)
- 大于:$gt (greater than)
- 大于等于:$gte
- 不等于:$ne
//查询集合中age=10的信息
db.student.find({age:10});
db.student.find({age:{'$eq':10}});
//查询集合中age>10的信息
db.student.find({age:{'$gt':10}});
//查询集合中范围内信息,相当于sql 中:select * from student where age>10and age<20;
db.student.find({age:{'$lt':20,'$gt':10}});
(4)、逻辑运算符使用
- AND:在json中写多个条件即可
db.student.find( { age:{$gte:10}, sex:'男'} )
- OR :使用$or, 值为数组, 数组中每个元素为json
AND和OR联合使用语法:
db.集合名.find(
{
条件1,
条件2,
$or:[{条件3},{条件4}]
}
)
//查询年龄大于10或性别为男生, 并且姓名是张三
db.student.find( {$or:[{ age:{$gte:10} },{sex:'男'}] ,name:'张三'} )
- EXISTS:
//查询address有数据的学生
db.student.find( {address:{$exists: true} )
(5)、范围运算符使用
使用$in, $nin 判断数据是否在某个数组内
//查询年龄为12,10的学生
db.student.find({age:{$in:[10,12]}})
(6)、模糊查询
//查询姓'张'的学生
db.student.find({name:{$regex:'^张'}})
db.student.find({name:/^张/})
//查询name中包含“张”的学生
db.student.find({name:/张/});
// 查询以“张”结尾的学生
db.student.find({name:/张$/});
(6)、其他使用
// 统计 db.集合名称.find({条件}).count() | db.集合名称.count({条件})
db.student.find().count()
db.student.count({age:10})
//排序---字段的值为-1表示倒序,为1表示正序
db.student..find().sort({age: -1})
//查询匹配结果的第3个文档到第5个文档
db.student.find().skip(2).limit(3);
备注:skip() 、limit()、sort() 三个放在一起执行的时候,执行的顺序是先 sort(), 然后是skip(),最后是显示 limit()