Skip to content

基本命令

db.createUser({  user:'root',pwd:'root',roles:[ {  role:'userAdminAnyDatabase', db: 'test'},'readWriteAnyDatabase']});

db.createUser({"user":"root","pwd":"root","roles":[{role:"readWrite",db:"test"}]})

mongosh -u root -p root
show collections
db.xxx.drop()
 db.dropDatabase()

总结

一种使用文档来存储数据的非关系型数据库 MongoDB 是文档型 NoSQL,BSON 存储,副本集(高可用)+ 分片(水平扩展); 索引基于 B + 树,复合索引遵循最左前缀,用 explain() 优化查询; 副本集选举靠 Raft 协议,奇数节点 + 多数派投票; 分片键选均匀分布字段,避免数据倾斜; 对比 MySQL:MongoDB 灵活易扩展,MySQL 事务强,核心业务选 MySQL。

WiredTiger(默认) 支持行级锁、压缩(Snappy/Zlib)、MVCC、事务

日志机制: Journal 日志:预写日志(WAL),默认 100ms 刷盘,崩溃后可恢复; Oplog 日志:副本集数据同步日志(固定大小的循环日志)。

MongoDB 分片集 核心组件:mongos(路由)、config server(配置)、shard(分片节点);

绝大部分流行的数据库存储引擎都是基于 B/B+ Tree 或者 LSM(Log Structured Merge) Tree 来实现的

MongoDB 固定集合(Capped Collections)

示例

sql

db.gitlab.aggregate([
    {
        "$group": {
            
            
            "_id": "$author_name",
            "count": {
                "$sum": 1
            }
        }
    }
]);


db.gitlab.aggregate([
    {
        $lookup: 
        {
            from: "project",
            localField: "project_id",
            foreignField: "id",
            as: "project"
        }
    },
    {
        $unwind: "$project"
    },
    {
        $project: {
            author_name: 1,
            "project_name": "$project.name",
            "project_id": "$project.id"
        }
    },
    {
        "$group": {
            
            
            "_id": {
                "project_name": "$project_name",
                "project_id": "$project_id",
                
            },
            "count": {
                "$sum": 1
            }
        }
    },
    {
        "$sort": {
            "count": - 1
        }
    },
    {
        "$limit": 10
    },
    {
        "$addFields": {
            "is_large": {
                "$gte": ["$count", 500]
            }
        }
    },
    {
        $project: {
            "project_name": "$_id.project_name",
            "count": 1,
            "_id": 0,
            "is_large": 1
        }
    }
]);


db.project.find(
    {
        "path_with_namespace": {
            "$regex": /^e/i
        }
    }
)

更新于:

note