分布式数据库之MongoDB
1. 指定工作目录并连接服务
cmd运行 mongod –dbpath MongoDB的目录 启动MongoDB数据服务器
再运行一个cmd 输入命令mongo 连接MongoDB服务器
2. 基本及高级用法
use DATABASE_NAME#创建数据库
show dbs#查看目前所有数据库列表
#若创建的数据库里没有集合(数据),则不会显示出来
db.dropDatabase()#删除选定的数据库,若没选择,会删除默认的刚创建的数据库
db.createCollection('集合名') #创建集合
db.COLLECTION_NAME.drop() #从数据库中删除一个集合
db.COLLECTION_NAME.insert() #插入文档
db.post.insert() #在集合中插入多个文档
db.COLLECTION_NAME .update({'key': 'value'},{$set:{'key':'new value'}}) #更新文档
db.COLLECTION_NAME.find() # 查询集合数据
db.COLLECTION_NAME.find() # 格式化查询文档
db.COLLECTION_NAME .save({_id:Objectld(),NEW_DATA}) # 替换现有文档和通过新的文档save()
db.COLLECTION_NAME .remove({要删除的文件},删除几个)
#remove({})为从集合中删除整个文件
db.mycol.find({key1:value1, key2:value2}).pretty() : #and与的方式查看同时满足两个条件的数据
db.mycol.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty() # or条件查看满足任意一条的数据
db.COLLECTION_NAME.find().limit(num) # 限制查看多少条信息
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER) # 使用跳过的文档数
练习
创建练习:
1.创建数据库 school 用来存放一些班级学生信息;
use school
2.你要为学校下的各个年级、班级建立集合;创建集合可以是显式的,也可以是隐式的;在这路你需要显式地创建“一年级一班的”集合grade_1_1;
db.createCollection("grade_1_1")
3.隐式创建“一年级二班”:grade_1_2创建的同时为“一年级二班”加入一个学生:
db.grade_1_2.insert({"name": 'zhangsan', "age": '7', "sex": "0"})
4.因为一些特殊原因,要解散一年级二班,删除一年级二班的信息
db.grade_1_2.drop()
5.使用循环创建一年级的3个班,并随机添加 10 名学生
for(grade_index in (grade = ['grade_1_1', 'grade_1_2', 'grade_1_3'])) {
for (var i = 1; i <= 10; i++) {
db[grade[grade_index]].insert({
"name": "zhangsan" + i,
"sex": Math.round(Math.random() * 10) % 2,
"age": Math.round(Math.random() * 6) + 3,
"hobby": []
});
}
}
查询练习:
6.查看一年级二班grade_1_2中的所有学生
db.getCollection('grade_1_2').find({})
7.查看一年级二班grade_1_2中所有年龄是 4 岁的学生
db.getCollection('grade_1_2').find({"age": 4})
8.查看一年级二班grade_1_2中所有年龄大于 4 岁的学生
db.getCollection('grade_1_2').find({"age": {$gt: 4}})
9.查看一年级二班grade_1_2中所有年龄大于 4 岁并且小于 7 岁的学生
db.getCollection('grade_1_2').find({"age": {$gt: 4, $lt: 7}})
10.查看一年级二班grade_1_2中所有年龄是 4 岁或 6 岁的学生
db.getCollection('grade_1_2').find({"age": {$in: [4, 6]}})
11.查看一年级二班grade_1_2中所有姓名带zhangsan1的学生
db.getCollection('grade_1_2').find({"name": {$regex: "zhangsan1"}})
12.查看一年级二班grade_1_2中所有姓名带zhangsan1和zhangsan2的学生
db.getCollection('grade_1_2').find({"name": {
$in: [new RegExp(""zhangsan1"), new RegExp(""zhangsan2")]
}})
13.查看一年级二班grade_1_2中所有兴趣爱好有三项的学生
db.getCollection('grade_1_2').find({"hobby": {$size: 3}})
14.查看一年级二班grade_1_2
中所有兴趣爱好包括画画的学生
db.getCollection('grade_1_2').find({"hobby": "drawing"})
15.查看一年级二班grade_1_2
中所有兴趣爱好既包括画画又包括跳舞的学生
db.getCollection('grade_1_2').find({"hobby": {$all: ["drawing", "dance"]}})
16.查看一年级二班grade_1_2中所有兴趣爱好有三项的学生的 学生数目
db.getCollection('grade_1_2').find({"hobby": {$size: 3}}).count()
17.查看一年级二班的第二位学生
db.getCollection('grade_1_2').find({}).limit(1).skip(1)
18.查看一年级二班的学生,按年纪升序
db.getCollection('grade_1_2').find({}).sort({"age": 1})
19.查看一年级二班的学生,按年纪降序
db.getCollection('grade_1_2').find({}).sort({"age": -1})
20.查看一年级二班的学生,年龄值有哪些
db.getCollection('grade_1_2').distinct('age')
21.查看一年级二班的学生,兴趣覆盖范围有哪些
db.getCollection('grade_1_2').distinct('hobby')
22.查看一年级二班的学生,男生(sex
为 0)年龄值有哪些
db.getCollection('grade_1_2').distinct('age', {"sex": 0})
删除练习:
23.一年级二班grade_1_2, 删除所有 4 岁的学生
db.getCollection('grade_1_2').remove({"age": 4})
24.一年级二班grade_1_2, 删除第一位 6 岁的学生
db.getCollection('grade_1_2').remove({"age": 6}, {justOne: 1})
修改练习
25.一年级二班grade_1_2中,修改名为zhangsan7的学生,年龄为 8 岁,兴趣爱好为 跳舞和画画;
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$set: {"age": 8, "hobby": ["dance", "drawing"]}})
26.一年级二班grade_1_2
中,追加zhangsan7`学生兴趣爱好唱歌;
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$push: {"hobby": "sing"}})
27.一年级二班grade_1_2
中,追加zhangsan7`学生兴趣爱好吹牛和打篮球;
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$push: {"hobby": {$each: ["brag", "play_basketball"]}}})
28.一年级二班grade_1_2
中,追加zhangsan7
学生兴趣爱好唱歌和打篮球,要保证hobby
数组不重复;
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$addToSet: {"hobby": {$each: ["sing1", "play_basketball"]}}})
29.新学年,给一年级二班所有学生的年龄都增加一岁
db.getCollection('grade_1_2').update({}, {$inc: {"age": 1}}, {multi: true})
30.一年级二班grade_1_2中,删除zhangsan7学生的sex属性
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$unset: {"sex": 1}})
31.一年级二班grade_1_2中,删除zhangsan7学生的hobby数组中的头元素
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pop: {"hobby": -1}})
32.一年级二班grade_1_2
中,删除zhangsan7
学生的hobby
数组中的尾元素
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pop: {"hobby": 1}})
33.一年级二班grade_1_2
中,删除zhangsan7
学生的hobby
数组中的sing
元素
db.getCollection('grade_1_2').update({"name": "zhangsan7"}, {$pull: {"hobby": "sing"}})