MongoDB的简单使用
MongoDB系统操作
查询所有数据库
show dbs
查看当前数据库
db
切换数据库
use后面的数据库名称可以事先不用存在,再存入集合的时候才会写入mongodb中。
use mongo_test
删除数据库
进入指定的数据库,删除
use python_spider
调用:
db.dropDatabase()
显示当前数据库的集合
show collections
创建集合
1.普通创建
stu_info是你的集合名称。
db.createCollection('stu_info')
2.创建有容量的集合
参数capped:默认值为false表示不设置上限,值为true表示设置上限
参数size:当前capped为true时,需要指定此参数,表示上限大小
当文档达到上限时,会将之前数据覆盖,单位为字节
db.createCollection('teacher_info', {capped: true, size: 10})
删除集合
db.teacher_info.drop()
数据的简单操作
插入数据
插入一条数据:
db.stu_test.insertOne({name: 'test', age: 23})
插入多条数据:
db.stu_test.insertMany([{name: "ambition", age: 22}, {name: "xiaoming", age: 23}])
存在时更新数据:
save方法在高版本中可能被弃用,本人使用的是
4.4
db.stu_test.save({_id: 10010, name: "xiaolan", age: 20})
数据更新
更新指定的字段,则其他字段会丢失。
db.stu_test.update({_id: 10010}, {name: "xiaowang"})
避免可以使用以下写法:
db.stu_test.update({_id: 10010}, {$set: {name: "xiaowang"}})
删除数据
删除单条
justOne=true(默认为false),删除一条
db.stu_test.remove({name: "xiaolan"}, {justOne: true})
删除多条
db.stu_test.remove({name: "xiaolan"})
查询操作
准备信息:
mongo
use mongo_test
// 插入信息
db.stu_info.insertMany([
{age: 20, gender: true, hometown: "蒙古", name: "郭靖"},
{age: 18, gender: false, hometown: "桃花岛", name: "黄蓉"},
{age: 18, gender: false, hometown: "蒙古", name: "华筝"},
{age: 40, gender: true, hometown: "桃花岛", name: "黄药师"},
{age: 16, gender: true, hometown: "大理", name: "段誉"},
{age: 45, gender: true, hometown: "大理", name: "段王爷"},
{age: 18, gender: true, hometown: "华山", name: "洪七公"}
]);
查询所有信息
db.getCollection('stu_info').find();
2.条件查询
mongo
db.stu_info.find({age: 18});
db.stu_info.findOne({age: 18});
使用终端运行的美化输出:
db.stu_info.find().pretty()
2.1.比较运算符
mongo
/*
* 小于:$lt
* 小于等于:$lte
* 大于:$gt
* 大于等于:$gte
* 不等于:$ne*/
// 查询年龄不等于18岁的
db.stu_info.find({age: {$ne: 18}})
// 范围查询: 查询年龄大于18岁小于50岁的
db.stu_info.find({age: {$gte: 18, $lte: 50}})
2.2.成员运算符
mongo
// 成员运算符
db.stu_info.find({age: {$in: [18, 20]}})
2.3.逻辑运算符
mongo
// 并且
db.stu_info.find({age: 18, gender: false})
// $or
db.stu_info.find({$or: [{age: 18}, {hometown: "桃花岛"}]})
2.4.正则表达式
mongo
// 正则表达式
// 查询名字以段开头的
db.stu_info.find({
name: {$regex: "^段"}
})
// 查询结尾
db.stu_info.find({
hometown: {$regex: "古$"}
})
2.5.其他查询
mongo
// 查询年龄小于20的前五条数据
db.stu_info.find({
age: {$lt: 20}
}).limit(5)
// 跳过前两条数据
db.stu_info.find({
age: {$lt: 20}
}).skip(2)
// 自定义查询
db.stu_info.find({
$where: function () {
return this.age >= 20
}
})
// 查询指定字段
db.stu_info.find({age: 20}, {name: 1, age: 1, _id: 0})
排序
mongo
// 排序
// -1 倒序
// 1 正序
db.stu_info.find().sort({age: 1})
统计
mongo
// 统计
db.stu_info.find().count()
db.stu_info.find({
age: {$lte: 30}
}).count()
去重
mongo
// 数据去重
db.stu_info.distinct(
"hometown", {age: {$lt: 18}}
)
高阶查询
管道查询
aggregate
,可以将()中的第一个大括号的结果运用到第二个里面。
1.分组查询
mongo
// 分组查询
db.stu_info.aggregate({
$group: {
_id: "$hometown",
counter: {
$sum: 1
}
}
});
2.求平均
mongo
// 分组查询,获取每一组的人数和平均年龄
db.stu_info.aggregate({
$group: {
_id: "$gender",
counter: {
$sum: 1
},
avg_age: {
$avg: "$age"
}
}
});
3.不指定分组查询
mongo
// 不指定分组查询
db.stu_info.aggregate({
$group: {
_id: null,
counter: {
$sum: 1
},
avg_age: {
$avg: "$age"
}
}
})
4.指定别名查询
mongo
// 字段指定别名
db.stu_info.aggregate({
$group: {
_id: "$gender",
counter: {
$sum: 1
},
avg_age: {
$avg: "$age"
}
}
}, {
$project: {
'性别': "$_id",
'人数': "$counter",
'平均年龄': '$avg_age',
_id: 0
}
})
5.match筛选
mongo
// match筛选
db.stu_info.aggregate(
{$match: {age: {$gt: 20}}},
{$group: {_id: "$gender", counter: {$sum: 1}, avg_age: {$avg: "$age"}}},
{$project: {'人数': "$counter", '平均年龄': "$avg_age", _id: 0}}
);
// 查询年龄大于20或者归属地在大理或者蒙古
db.stu_info.aggregate(
{
$match: {
age: {$gte: 18},
hometown: {
$in: ["蒙古", "大理"]
}
}
},
{
$group: {
_id: "$gender",
counter: {$sum: 1},
avg_age: {$avg: "$age"}
}
},
{
$project: {
'平均年龄': "$avg_age",
'人数': "$counter",
"性别": "$_id",
_id: 0
}
}
)
6.分组排序
mongo
// 排序sort
// 先按照gender分组,然后根据人数正序
db.stu_info.aggregate(
{
$group: {_id: "$gender", counter: {$sum: 1}, avg_age: {$avg: "$age"}}
},
{
$sort: {counter: 1}
}
)