MongoDB

MongoDB的下载与安装

直接用brew install mongodb是不行的

正确的应该是brew install mongodb-community@4.2,安装的是最新的版本的MongoDB(4.2.6)
mongodb-1

启动:brew services start mongodb-community@4.2

关闭:brew services stop mongodb-community@4.2

可视化工具

可以直接使用navicat来连接mongoDB
mongdb-2

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
    }
);
posted @ 2020-05-15 16:00  比特币气氛组  阅读(113)  评论(0编辑  收藏  举报