当前位置 博文首页 > 岁月平添了我的愁:MongoDB超详细保姆级入门教程!
SQL:结构化查询语言
BSON:二进制JSON
在MongoDB中,数据库和集合都不需要我们手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在,她会自动创建数据库和集合!
基本指令
show dbs:显示当前所有数据库
show database:显示当前所有数据库
use 数据库名:进入到指定的数据库中(可以不存在)
db:表示我们当前所处的数据库
show collections:显示我们数据库中所有的集合
CRUD操作
向数据库中插入文档
db..insert(doc):向集合中插入文档
向test数据库中的stus集合中插入一个新的学生对象
db.stus.insert ( {name:“孙悟空”,age:18,gender:”男“} )
查询集合中的所有文档
db..find()
db.collection.insert()
db.stus.insert({name:"冉海锋",age:28,gender:"男"})
db.stus.find()db.stus.insert([
{name:"沙和尚",age:36,gender:"男"},
{name:"白骨精",age:16,gender:"女"},
{name:"蜘蛛精",age:14,gender:"女"}
])
$push:用于向数组中添加一个新的元素
db.user.update({username:"tangseng"},{$push:{"hobby.movies":"Interstellar"}})
$addToSet:向数组中添加一个新元素(类似于向set集合中添加,如果数组中已经存在了该元素,则添加失败,因为不可重复)
db.user.update({username:"tangseng"},{$addToSet:{"hobby.movies":"Interstellar"}})
db.collection.find()
find()用来查询集合中所有符合条件的文档
find()可以接收一个对象作为条件参数
db.collection.findOne()
用来查询集合中符合条件的第一个文档
返回的是一个文档
db.stus.find({}).count():查询所有结果的数量
db.stus.find({name:"冉海锋"})
db.stus.findOne({name:"冉海锋"})
db.stus.find({name:"冉海锋"})[0]
db.stus.find({}).length()
如果需要修改指定的属性,而不是替换,需要使用 “修改操作符” 来完成修改
db.collection.updateMany():同时修改多个符合条件的文档
db.collection.updateOne():修改一个符合条件的文档
db.collection.replaceOne():替换一个符合条件的文档
MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是文档时,我们称这个文档为内嵌文档
MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档可以则可以通过==.的形式来匹配,且属性名必须使用引号==,双引号单引号都可以
db.user.find("hobby.movies":"hero");
db.stus.find()
db.stus.update(
{name:"沙和尚"},{age:28}
)
db.stus.update(
{"_id" : ObjectId("5f86edc1048d21081bd45f3b")},
{$set:{ gender:"男", address:"流沙河" }} )
db.stus.update(
{"_id" : ObjectId("5f86edc1048d21081bd45f3b")},
{$unset:{ address:"流沙河" }} )
db.stus.updateMany(
{"name" :"冉海锋"},
{$set:{ address:"高老庄" }} )
db.stus.find()
db.stus.update(
{"name" :"冉海锋"},
{ $set:{ address:"呵呵呵" } },
{ multi:true } )
db.stus.find()
db.stus.remove({age:28},true)
db.stus.remove({}) //性能差
db.stus.drop()
db.dropDatabase()
//添加两万条数据的性能高,尽量少调用系统的方法
var arr=[];
for(var i=1;i<=20000;i++){
arr.push({num:i});
}
db.user.insert(arr);
//查询numbers中num大于5000的文档
db.unmbers.find({num:{$gt:500}})
//查询numbers中num小于30的文档
db.unmbers.find({num:{$lt:500}})
//查询numbers中num大于40小于50的文档
db.numbers.find({num:{$gt:40,$lt:50}})
//查询numbers前10条的数据
db.numbers.find({num:{$lte:10}})
//limit()设置显示数据的上限
db.numbers.find().limit(10)
//查询numbers中第11条到20条的数据
//skip()用于跳过指定数量的数据 skip( (页码-1)*每页显示的条数 ).limit(每页显示的条数)
//MongoDB会自动调整limit()和skip()的位置
db.numbers.find().skip(10).limit(10)
db.numbers.find().limit(10).skip(10)
一对一(one to one)
夫妻
在MongoDB中,可以通过内嵌文档的形式来体现出一对一的关系
db.WifeAndHusband.insert([
{
wife:"黄蓉",
husband:{
name:"郭靖"
}
},
{
wife:"潘金莲",
husband:{
name:"武大郎"
}
}
])
一对多(one to many)/ 多对一(many to one)
一对多:父母和孩子、用户和订单、文章和评论,也可以通过内嵌文档的方式来映射一对多的关系(将1的那个属性设置为多的里面的字段)
db.order.insert({
list:["watermelor"],
user_id:ObjectId("5f87b1deda684b252c2fc7a5")
})
var user_id = db.users.findOne({username:"swk"})._id
//查询孙悟空的订单
db.order.find({user_id:user_id})
多对多(many to many):分类和商品,通过内嵌文档的方式
db.teacher.insert([
{name:"洪七公"},
{name:"黄药师"},
{name:"龟仙人"}
])
db.stus.insert([
{
name:"郭靖",
tech_ids:[
ObjectId("5f87b4b6da684b252c2fc7a8"),
ObjectId("5f87b4b6da684b252c2fc7a9")
]
},
{
name:"孙悟空",
tech_ids:[
ObjectId("5f87b4b6da684b252c2fc7a8"),
ObjectId("5f87b4b6da684b252c2fc7a9"),
ObjectId("5f87b4b6da684b252c2fc7aa")
]
}
])
//查询工资小于1000或者大于2000的员工
db.emp.find( $or:[ {sal:{$lt:1000}},{sal:{$gt:2500}} ])
//为所有工资小于1000的增加400
db.emp.find({sal:{$lte:1000}}, {$inc:{$sal:400}})
find()查询文档时,默认情况是按照_id的值进行升序排列
sort()可以用来指定文档的排序的规则,需要传递一个属性来指定排序规则,1表示升序,-1表示降序
db.users.find({}).sort({sale:1