基本命令
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
}
}
)