MongoDB的下载与安装
直接用brew install mongodb
是不行的
正确的应该是brew install mongodb-community@4.2
,安装的是最新的版本的MongoDB(4.2.6)
启动:brew services start mongodb-community@4.2
关闭:brew services stop mongodb-community@4.2
可视化工具
可以直接使用navicat来连接mongoDB
MongoDB操作
Mongo是一个Nosql的数据库
在MongoDB中,集合只有在内容插入后才会创建!就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
创建并使用数据库:use test
查看数据库:db
查看所有数据库,看不到刚刚创建的数据库,要插入一条数据之后才能看见:show dbs
删除数据库:db.dropDatabase()
创建集合:db.createCollection("role")
查看集合:show table/show collections
删除集合:db.role.drop()
向文档中插入数据
db.article.insert({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '弘辉',
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100
})
查找命令:db.article.find()
可以把数据定义成一个变量插入
document = ({
title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: '弘辉',
tags: ['es', 'database', 'NoSQL'],
likes: 100
});
db.article.insert(document)
更新文档,但只会修改第一条发现的文档
db.article.update({'title': 'MongoDB 教程'}, {$set: {'title': 'MySql'}})
如果要修改多条文档, multi 参数为 true。
db.article.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
根据ID修改数据,没有则新增数据
db.article.save({
"_id": ObjectId("5ebdf6de178ae527e1098113"),
"title": "MongoDB",
"description": "MongoDB 是一个 Nosql 数据库",
"by": "弘辉",
"tags": [
"mongodb",
"NoSQL"
],
"likes": 110
})
删除文档,删除全部符合条件的文档
db.article.remove({'title':'es 教程'})
删除文档,删除第一条符合条件的文档
db.article.remove({'title':'es 教程'},1)
删除文档下全部数据
db.article.deleteMany({})
删除 status=A 的全部文档
db.article.deleteMany({ status : "A" })
删除 status=D的一个文档
db.inventory.deleteOne( { status: "D" } )
删除完数据之后回收磁盘空间
db.repairDatabase()
查询文档,pretty() 方法以格式化的方式来显示所有文档
db.col.find().pretty()
多个条件and查询
db.article.find({"by":"弘辉", "title":"MongoDB 教程"}).pretty()
多个条件or查询
db.article.find({$or:[{"by":"弘辉"},{"title": "MongoDB 教程"}]}).pretty()
or和and联合查询
db.article.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
范围查询
db.article.find({likes : {$gt :100}}) // likes大于150的数据
db.article.find({likes : {$gte : 100}}) // likes大于等于100的数据
db.article.find({likes : {$lt : 150}}) // likes小于150的数据
db.article.find({likes : {$lte : 150}}) // likes小于等于150的数据
db.article.find({likes : {$lt :200, $gt : 100}}) // likes大于100,小于200的数据
模糊查询
db.article.find({title:/教/}) // 包含教字
db.article.find({title:/^教/}) // 以教字开头
db.article.find({title:/教$/}) // 以教字结尾
读取指定数量的数据记录
db.article.find().limit(2) // 取前两条数据
db.article.find().limit(2).skip(2) // 跳过前两条,取两条数据
排序
db.article.find().sort({"likes":-1}) // 1为升序,-1为降序
创建索引
db.article.createIndex({"title":1}) // 1为升序,-1为降序
db.article.createIndex({"title":1,"description":-1}) // 设置多个字段索引,关系型数据库称复合索引
db.article.getIndexes() // 查看集合索引
db.article.totalIndexSize() // 查看集合索引大小
db.article.dropIndexes() // 删除集合索引
db.article.dropIndex({"title":1}) // 删除集合指定索引
聚合-求和
db.article.aggregate([{$group : {_id: "$by", sum : {$sum : 1}}}])
按字段显示查询结果,默认显示_id,设置为0,则不显示_id
db.article.aggregate(
{
$project: {
_id: 0,
title: 1,
by: 1,
}
}
);
match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理
db.article.aggregate([
{
$match: {
likes: {
$gt: 100,
$lte: 150
}
}
},
{
$group: {
_id: "$title",
count: {
$sum: 1
}
}
}
]);
前面两个文档被过滤掉
db.article.aggregate(
{
$skip: 2
}
);