启动服务器
- 打开cmd
- 输入mongod,启动服务器
- 输入mongo,回车
基本概念
- 数据库(database)
- 集合(collection)
- 文档(document)
在MongoDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果所在的集合或数据库不存在,会自动差UN改接口数据库和集合。
基本命令
- show dbs(show database): 显示当前所有数据库
- use: 数据库名称
- db: 代表的就是当前数据库
- show collections: 显示当前数据库中所有的集合
数据库的CRUD(常用)
插入:
1. db.<collection>.insert(doc)
向集合中插入一个文档
例子:向test数据库中的,student中插入一个学生对象
db.student.insert({name:'景天',age: 18})
2. db.<collection>.insertOne(),只插入一个
3. db.<collection>.insertMany(),插入多个,必须是数组
查询:
1. db.<collection>.find()
返回值是一个数组
不传值: 查询当前集合中的所有文档
传值:必须是一个对象
例子:db.students.find({name: "景天"})
2. db.<collection>.findOne()
返回值是一个对象
查询集合中符合条件的第一个文档
3. db.<collection>.find().conut()
查询集合中一共有多少个文档
4. db.<collection>.find({"info.name":"景天"})
查询多级嵌套文档,属性需要用引号
5. db.<collection>.find().limit(10)
只显示10条数据
6. db.<collection>.find().skip(10).limit(10)
跳过10条数据,显示10条数据,相当于显示11-20的数据
7. db.<collection>.find().sort()
需要传递一个参数来排序,1是正序,-1是倒序
例子:db.students.find().sort({age:1,weight:-1})
8. db.<collection>.find({},{})
第二个参数,是投影,意思是哪些想要显示出来的,写在这里就行了,1是显示,-1是不显示
例子:db.students.find({},{name:1}) // 意思只显示name,age等其他字段不显示出来了
操作符:
$gt:判断文档中大于某个值时(大于小于可以一起写,用逗号分割,意思为,大于A且小于B的值)
例子:db.students.find({num:{$gt:500}})
大于等于:
例子:db.students.find({num:{$gte:500}})
$lt:判断文档中小于某个值时
例子:db.students.find({num:{$lt:500}})
小于等于:
例子:db.students.find({num:{$lte:500}})
$or:判断文档中符合某个条件或者某个条件
db.students.find({$or:[{num:{$lt:500}},{num:{$gt:800}}]})
修改:
1. db.<collection>.update(查询条件,新对象)
update()默认情况会是用新对象替换旧的对象,即旧对象中所有东西都没有了,只有新对象。
update()默认情况值修改一个。
如果需要修改指定的属性,而不是替换,需要使用’修改操作符‘来完成修改:
$set: 修改指定文档的某个值为新的值,没有这个值就会添加一个新的值
例子:db.students.update({name:"景天"},{$set:{age:20}})
$unset: 删除指定文档的某个值
例子:db.students.update({name:"景天"},{$unset:{age:20}})
$push:当文档是数组时,往里面添加数据
例子:db.students.update({name:"景天"},{$push:{like:"龙葵"}})
$addToSet:当文档是数组时,往里面添加数据(和上面的push不同的是,当数组中已有要添加的值,就不会再添加了)
例子:db.students.update({name:"景天"},{$addToSet:{like:"龙葵"}})
$pull:当文档是数组时,删除符合条件的数据
例子:db.students.update({name:"景天"},{$pull:{like:"龙葵"}})
$inc:自增
给文档中的所有num字段小于500的增加100
例子:db.students.updateMany({num:{$lt:500}},{$inc:{num:100}})
2. db.<collection>.updateOne(查询条件,新对象)
修改一个符合条件的文档
3. db.<collection>.updateMany(查询条件,新对象)
修改多个符合条件的文档
4. db.<collection>.replaceOne(查询条件,新对象)
替换一个新的文档
删除:
1. db.<collection>.remove({})
可以根据条件删除一个文档,传参和查找一样的,但是必须传参,可以是一个空对象,当传空对象的时候,就会删除全部。
默认删除所有符合条件的文档,有多少删除多少,相当于清空集合
2. db.<collection>.deleteOne()
删除集合中的一个文档
3. db.<collection>.deleteMany()
删除集合中的多个文档
4. db.<collection>.drop()
删除集合,集合整个没了
使用例子
一对多的关系
// 前提:两个集合,一个是users,里面包含N用户;一个是orders,里面包含N个订单
// 查询用户 吕子乔 的所有订单
// 先查询users集合,查询到吕子乔的用户ID
var userId = db.users.findOne({name:"吕子乔"})._id
// 再根据用户ID用orders中查找改用户ID的订单
db.orders.find({userId:userId})
多对多的关系
基本和一对多一样,只是userID这个应该是个数组