2019-04-12
2019-04-12 本文已影响0人
fb941c99409d
基本概念
数据库(database)
集合(collection)
文档(document)
- 在MongoDB中,数据库和集合都不需要手动创建,
当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合
基本指令
show dbs
show databases
- 显示当前的所有数据库
use 数据库名
- 进入到指定的数据库中
db
- db表示的是当前所处的数据库
show collections
- 显示数据库中所有的集合
插入文档操作
db.<collection>.insert([{name:"猪八戒",age:28,gender:"男"},{name:"猪八戒",age:28,gender:"男"}])
- 向集合中插入一个或多个文档
- 当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id
该属性用来作为文档的唯一标识
- _id我们可以自己指定,如果我们指定了数据库就不会在添加了,如果自己指定_id 也必须确保它的唯一性
// 插入一个文档对象
db.collection.insertOne({name:"猪八戒",age:28,gender:"男"})
//插入多个文档对象
db.collection.insertMany()
查询
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 可以用来删除文档的指定属性
$push 字段的值是数组时 可以用于向数组中添加一个新的元素 存在不存在都添加
$addToSet 字段的值是数组时 可以用于向数组中添加一个新的元素,不存在则添加
- update()默认只会修改一个
db.collection.updateMany()
- 同时修改多个符合条件的文档
db.collection.updateOne()
- 修改一个符合条件的文档
db.collection.replaceOne()
- 替换一个文档
//替换
db.stus.update({name:"沙和尚"},{age:28});
//修改指定属性
db.stus.update(
{"_id" : ObjectId("59c219689410bc1dbecc0709")},
{$set:{
gender:"男",
address:"流沙河"
}}
)
//删除指定属性
db.stus.update(
{"_id" : ObjectId("59c219689410bc1dbecc0709")},
{$unset:{
address:1
}}
)
//修改N个符合条件的属性
db.stus.updateMany(
{"name" : "猪八戒"},
{
$set:{
address:"猪老庄"
}
}
);
db.stus.update(
{"name" : "猪八戒"},
{
$set:{
address:"呵呵呵"
}
} ,
{
multi:true//update()默认只会修改一条记录 指定这个参数可以一次修改多条记录
}
)
删除
db.collection.remove()
- 删除一个或多个,可以第二个参数传递一个true,则只会删除一个
- 如果传递一个空对象作为参数,则会删除所有的
db.collection.deleteOne()
db.collection.deleteMany()
db.collection.drop() 删除集合
db.dropDatabase() 删除数据库
CURD操作返回的结果
<script type="text/JavaScript">
use my_test
switched to db my_test
db.user.insert({name:"mary",age:18})
WriteResult({ "nInserted" : 1 })
db.user.find()
{ "_id" : ObjectId("5cac60342ed959b607737bd2"), "name" : "mary", "age" : 18 }
db.user.insert([{name:"mary",age:18},{name:"kobe",age:19}])
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
db.user.find()
{ "_id" : ObjectId("5cac60342ed959b607737bd2"), "name" : "mary", "age" : 18 }
{ "_id" : ObjectId("5cac61282ed959b607737bd3"), "name" : "mary", "age" : 18 }
{ "_id" : ObjectId("5cac61282ed959b607737bd4"), "name" : "kobe", "age" : 19 }
db.user.find().count()
3
db.user.update({name:"kobe"},{$set:{address:"北京"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
db.user.remove({"hobby.cities":"beijing"})
WriteResult({ "nRemoved" : 1 })
db.user.remove({}) //清空集合 必须加空{}
db.user.drop() //删除集合
true
</script>
练习
//1.进入my_test数据库
use my_test
//2.向数据库的user集合中插入一个文档
db.user.insert({name:"mary",age:18})
//3.查询user集合中的文档
db.user.find()
//4.向数据库的user集合中插入一个文档
db.user.insert([{name:"mary",age:18},{name:"kobe",age:19}])
//5.查询数据库user集合中的文档
db.user.find()
//6.统计数据库user集合中的文档数量
db.user.find().count()
//7.查询数据库user集合中username为sunwukong的文档
db.user.find({name:"kobe"})
//8.向数据库user集合中的username为sunwukong的文档,添加一个address属性,属性值为huaguoshan
db.user.update({name:"kobe"},{$set:{address:"北京"}})
//9.使用{username:"tangseng"} 替换 username 为 zhubajie的文档
db.user.update({name:"mary"},{name:"wada"})
//10.删除username为sunwukong的文档的address属性
db.user.update({name:"kobe"},{$unset:{address:1}})
//11.向username为sunwukong的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}
db.user.update({name:'kobe'},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}}})
//12.向username为tangseng的文档中,添加一个hobby:{movies:["A Chinese Odyssey","King of comedy"]}
db.user.update({name:"mary"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}})
//13.查询喜欢电影hero的文档
db.user.find({"hobby.movies":"hero"})
//14.向tangseng中添加一个新的电影Interstellar
db.user.update({name:"mary"},{$addToSet:{"hobby.movies":"Interstellar"}})
//15.删除喜欢beijing的用户
db.user.remove({"hobby.cities":"beijing"})
//16.删除user集合
db.user.remove({})
db.user.drop()
show dbs
//17.向numbers中插入20000条数据 time: 0.2s
var arr =[]
for(var i=1;i<=20000;i++){
arr.push({number:i});
}
db.numbers.insert(arr);
db.numbers.find()
db.numbers.remove({})
db.numbers.drop()
//向numbers中插入5000000条数据 time: 72.9s
var count=5000000
var arr =[]
for(var i=1;i<=count;i++){
arr.push({number:i});
}
db.numbers.insert(arr);
//向number中以每次1万条 批量插入500万条数据 time: 68.2s
var count=5000000
var arr =[]
for(var i=1;i<=count;i++){
arr.push({number:i});
if(arr.length%100000==0 || i>=count){
db.numbers.insert(arr);
arr=[];
}
}
//18.查询numbers中num为500的文档
db.numbers.find({number:500})
//19.查询numbers中num大于5000的文档
db.numbers.find({number:{$gt:5000}})
//20.查询numbers中num小于30的文档
db.numbers.find({number:{$lt:30}})
//21.查询numbers中num大于40小于50的文档
db.numbers.find({number:{$gt:40,$lt:50}})
//22.查询numbers中num大于19996的文档
db.numbers.find({number:{$gt:19996}})
//23.查看numbers集合中的前10条数据
db.numbers.find({number:{$lte:10}})
db.numbers.find({number:{$lt:11}})
//limit()设置显示数据的上限
db.numbers.find().limit(10);
//24.查看numbers集合中的第11条到20条数据
db.numbers.find({number:{$gt:10,$lte:20}})
//skip()用于跳过指定数量的数据
db.numbers.find().skip(10).limit(10)
//25.查看numbers集合中的第21条到30条数据
db.numbers.find({number:{$gt:20,$lte:30}})
db.numbers.find().skip(20).limit(10)
//26.将dept和emp集合导入到数据库中
//27.查询工资小于2000的员工
//28.查询工资在1000-2000之间的员工
//29.查询工资小于1000或大于2500的员工
//30.查询财务部的所有员工
//31.查询销售部的所有员工
//32.查询所有mgr为7698的所有员工
//33.为所有薪资低于1000的员工增加工资400元