- 基本概念
数据库(database)
集合(collection)
文档(document)
- 在MongoDB中,数据库和集合都不需要手动创建,
当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
- 基本指令
show dbs
show databases
- 显示当前的所有数据库
use 数据库名
- 进入到指定的数据库中
db
- db表示的是当前所处的数据库
show collections
- 显示数据库中所有的集合
- MongoDB的CRUD的操作
- 基本操作
use 数据库
- 进入指定的数据库
show dbs
- 显示所有的数据库
show collections
- 显示数据库中所有的集合
db
- 显示当前所在的数据库
- 向数据库中插入文档
- db.collection.insert()
- insert()可以向集合中插入一个或多个文档
- db.collection.insertOne()
- 向集合中插入一个文档
- db.collection.insertMany()
- 向集合中插入多个文档
- 查询数据库中的文档
- db.collection.find()
- 可以根据指定条件从集合中查询所有符合条件的文档
- 返回的是一个数组
- db.collection.findOne()
- 查询第一个符合条件的文档
- 返回的是一个对象
- db.collection.find().count()
- 查询符合条件的文档的数量
- 修改数据库中的文档
- db.collection.update()
- 可以修改、替换集合中的一个或多个文档
- db.collection.updateOne()
- 修改集合中的一个文档
- db.collection.updateMany()
- 修改集合中的多个文档
- db.collection.replaceOne()
- 替换集合中的一个文档
- 删除集合中的文档
- db.collection.remove()
- 删除集合中的一个或多个文档(默认删除多个)
- db.collection.deleteOne()
- 删除集合中的一个文档
- db.collection.deleteMany()
- 删除集合中的多个文档
- db.collection.remove({})
- 清空一个集合
- db.collection.drop()
- 删除一个集合
- db.dropDatabase()
- 删除一个数据库
向数据库插入文档
/* 向数据库插入文档 db.<collection>.insert() - 向集合中插入一个或多个文档 - 当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id 该属性用来作为文档的唯一标识 - _id我们可以自己指定,如果我们指定了数据库就不会在添加了,如果自己指定_id 也必须确保它的唯一性 db.collection.insertOne() - 插入一个文档对象 db.collection.insertMany() - 插入多个文档对象 */ db.stus.insert({name:"猪八戒",age:28,gender:"男"}); db.stus.insert([ {name:"沙和尚",age:38,gender:"男"}, {name:"白骨精",age:16,gender:"女"}, {name:"蜘蛛精",age:14,gender:"女"} ]); db.stus.insert({_id:"hello",name:"猪八戒",age:28,gender:"男"}); db.stus.find(); ObjectId()
删除文档
/* db.collection.remove() - 删除一个或多个,可以第二个参数传递一个true,则只会删除一个 - 如果传递一个空对象作为参数,则会删除所有的 db.collection.deleteOne() db.collection.deleteMany() db.collection.drop() 删除集合 db.dropDatabase() 删除数据库 - 一般数据库中的数据都不会删除,所以删除的方法很少调用 一般会在数据中添加一个字段,来表示数据是否被删除 */ db.stus.insert([ { name:"zbj", isDel:0 }, { name:"shs", isDel:0 }, { name:"ts", isDel:0 } ]); db.stus.updateOne({name:"ts"},{$set:{isDel:1}}); db.stus.find({isDel:0})
查询
/* 查询 db.collection.find() - find()用来查询集合中所有符合条件的文档 - find()可以接收一个对象作为条件参数 {} 表示查询集合中所有的文档 {属性:值} 查询属性是指定值的文档 - find()返回的是一个数组 db.collection.findOne() - 用来查询集合中符合条件的第一个文档 - findOne()返回的是一个文档对象 db.collection.find({}).count() - 查询所有结果的数量 */ db.stus.find({_id:"hello"}); db.stus.find({age:16 , name:"白骨精"}); db.stus.find({age:28}); db.stus.findOne({age:28}); db.stus.find({}).count();
修改
/* 修改 db.collection.update(查询条件,新对象) - update()默认情况下会使用新对象来替换旧的对象 - 如果需要修改指定的属性,而不是替换需要使用“修改操作符”来完成修改 $set 可以用来修改文档中的指定属性 $unset 可以用来删除文档的指定属性 - update()默认只会修改一个 db.collection.updateMany() - 同时修改多个符合条件的文档 db.collection.updateOne() - 修改一个符合条件的文档 db.collection.replaceOne() - 替换一个文档 */ db.stus.find({}); //替换 db.stus.update({name:"沙和尚"},{age:28}); db.stus.update( {"_id" : ObjectId("59c219689410bc1dbecc0709")}, {$set:{ gender:"男", address:"流沙河" }} ) db.stus.update( {"_id" : ObjectId("59c219689410bc1dbecc0709")}, {$unset:{ address:1 }} ) db.stus.updateMany( {"name" : "猪八戒"}, { $set:{ address:"猪老庄" } } ); db.stus.update( {"name" : "猪八戒"}, { $set:{ address:"呵呵呵" } } , { multi:true } ) db.stus.find()
sort和投影
//查询文档时,默认情况是按照_id的值进行排列(升序) //sort()可以用来指定文档的排序的规则,sort()需要传递一个对象来指定排序规则 1表示升序 -1表示降序 //limit skip sort 可以以任意的顺序进行调用 db.emp.find({}).sort({sal:1,empno:-1}); //在查询时,可以在第二个参数的位置来设置查询结果的 投影 db.emp.find({},{ename:1 , _id:0 , sal:1});
文档之间的关系
/* 文档之间的关系 一对一(one to one) - 夫妻 (一个丈夫 对应 一个妻子) - 在MongoDB,可以通过内嵌文档的形式来体现出一对一的关系 一对多(one to many)/多对一(many to one) - 父母 - 孩子 用户 - 订单 文章 - 评论 - 也可以通过内嵌文档来映射一对多的关系 多对多(many to many) - 分类 - 商品 老师 - 学生 */ db.wifeAndHusband.insert([ { name:"黄蓉", husband:{ name:"郭靖" } },{ name:"潘金莲", husband:{ name:"武大郎" } } ]); db.wifeAndHusband.find(); //一对多 用户(users) 和 订单(orders) db.users.insert([{ username:"swk" },{ username:"zbj" }]); db.order.insert({ list:["牛肉","漫画"], user_id: ObjectId("59c47e35241d8d36a1d50de0") }); db.users.find() db.order.find() //查找用户swk的订单 var user_id = db.users.findOne({username:"zbj"})._id; db.order.find({user_id:user_id}); //多对多 db.teachers.insert([ {name:"洪七公"}, {name:"黄药师"}, {name:"龟仙人"} ]); db.stus.insert([ { name:"郭靖", tech_ids:[ ObjectId("59c4806d241d8d36a1d50de4"), ObjectId("59c4806d241d8d36a1d50de5") ] },{ name:"孙悟空", tech_ids:[ ObjectId("59c4806d241d8d36a1d50de4"), ObjectId("59c4806d241d8d36a1d50de5"), ObjectId("59c4806d241d8d36a1d50de6") ] } ]) db.teachers.find() db.stus.find()