MongoDB知识整理

数据库操作

show dbs;      //显示数据库列表(注意,无集合的数据库不显示)
db;            //显示当前正在使用的数据库
use dbname;    //如果存在,则切换至数据库,如果不存在,创建后切换至数据库
show tables;         //展示当前库中的集合列表
show collections;    //同上
db.dropDatabase();   //删除当前数据库

集合操作

db.cretaeCollection(name, options);    //创建数据库 name:数据库名称 options:选项
                                       //options {
                                       //   capped : false|true 是否限制集合大小
                                       //   size : 100 当文档达到上限时,会覆盖之前的数据,                        
                                       //              单位为字节
                                       //}

db.collection_name.drop();             //删除当前库的collection_name集合                                      

文档简单操作

db.collection_name.insert({"name":"renling"});
//    插入数据,如果不存在collection_name的集合,则会自动创建

db.collection_name.find();
db.collection_name.find().pertty();
//    查询collection_name中的所有数据,pertty将会格式化显示

db.collection_name.update(where_json, data_json);
//    全量修改数据,会将匹配到的整体JSON替换为data_json数据
db.collection_name.update(where_json, {'$set' : data_json});
//    非全量修改数据

db.collection_name.remove(where_json);
//    删除数据

高级操作(where_json部分)

//比较查询
{"name":"xiaogang.cui"}            //等于运算符
{"age":{'$gt':15}}                 //$gt 大于运算符
{"age":{'$lt':15}}                 //$lt 小于运算符
{"age":{'$gte':15}}                //$gte 大于等于运算符
{"age":{'$lte':15}}                //$lte 小于等于运算符
{"age":{'$ne':15}}                 //$ne 不等于运算符
{"age":{'$gt':15,'$lt':22}}        //组合操作

//IN|NOT IN 查询
{"age":{'$in', [11,23,45]}}
{"age":{'$nin', [11,23,45]}}

//size 查询
// 前提是data是个对象或者数组
{"data":{'$size' : 12}}           //data有12个元素     
{"data":{'$size':{'$gt':4}}};     //data的元素个数大于4个

//是否存在某个健明    //true 表示存在 false 表示不存在
{"age":{$exists:true}}
{"age":{$exists:true, $eq:12}}

//OR 条件
{$or: [{"age":18}, {"name":"xiaogang.cui"}]}
{$or: [{"age":{$gt:20}}, {"age":{$lt:18}}]}

//正则匹配(模糊查询)
{"age":{$regex:/^\d+$/}}
{"name":/^\.*\d+$/}

高级操作(其他操作)

//排序 1-升序 2-降序
db.collection_name.find().sort({"age":1, "time":-1});

//限制输出
db.collection_name.find().limit(10);    //只取前10条数据 = limit 10
db.collection_name.find().skip(10).limit(10);    //取10后的前10条 = limit 10,10

MongoDB的数据类型

  • ObjectID          文档ID,是一个12字节的十六进制数
  • String          字符串,必须是有效的UTF-8
  • Boolean          布尔
  • Integer          整形,可以使32或64位,取决于服务器
  • Double          浮点型
  • Arrays          数组或列表
  • Object          嵌入式的文档
  • Null
  • Timestamp          时间戳
  • Date          存储当前的日期或时间的UNIX时间格式

聚合命令

语法:db.collection_name.aggregate([{"管道符":{表达式}}])

常用管道

  • $group          讲集合中的文档进行分组,可用于统计结果
  • $match          过滤数据,只输出符合条件的文档
  • $project          修改输入文档的结构,如:重命名、增加、删除、创建计算结果等
  • $sort          将输入文档排序后输出
  • $limit          限制聚合管道返回的文档数
  • $skip          跳过指定数量的文档
  • $unwind          将数组类型的字段进行拆分

常用表达式

  • $sum          计算综合, 需要注意的是{$sum:1} 相当于求得数据的数量 count
  • $avg          计算平均值
  • $min          获取最小值
  • $max          获取最大值
  • $push          在结果文档中插入到一个数组中
  • $first          根据资源文档的排序获取第一个文档数据
  • $last          根据资源文档的排序获取最后一个文档数据
//核心语法
db.collection_name.aggregate([
    {管道1: {表达式1}},
    {管道2: {表达式2}},
    {管道3: {表达式3}}
])

//$limit  限制输出的数据条数
db.collection_name.aggregate({$limit:3});

分组查询(特殊)

//$group 分组查询
db.collection_name.aggregate(
    {$group: 
        {
            _id : '$字段名',        //根据某个字段进行分组 group by field
            别名 : {聚合函数:'$字段名'}    //计算的数据
        }
    }
);
//分组查询年龄之和
db.collection_name.aggregate(
    {$group: {
        _id:'$name',
        'total_age':{$sum:'$age'}
    }}
);
//_id 为null代表不分组
db.collection_name.aggregate(
    {$group: {
        _id:null,
        "平均年龄":{$avg:'$age'},
        "数据条数":{$sum:1}
    }}
);
//$push 进行拼接操作
db.collection_name.aggregate(
    {$group: {
        _id : '$sex',
        'count' : {$sum:1},
        "名单" : {$push:'$name'}
    }}
);
// $first $last 按照分组排序获取第一、最后的数据
db.collection_name.aggregate({
    $group:{
        _id:'$sex',
        "小组第一个人":{$first:'$name'},
        "小组最后一个人":{$last:'$name'}
    }
});

其他管道应用

//年龄大于30的数据  $match 过滤数据 
db.collection_name.aggregate({
   $match:{"age":{$gt:30}} 
});
//对过滤后的数据进行分组
db.collection_name.aggregate([
    {$match:{"age":{$gt:30}}},
    {$group:{_id:null, 'count':{$sum:1}}}
]);

//限定字段的管道符 $project
db.collection_name.aggregate({
    $project:{"_id":0, "name":1,"sex":0,"age":1}    //1 显示 0 不显示
});

//排序 $sort
db.collection_name.aggregate({
    $sort: {
        "age":1
    }
});    //按年龄从小到大

//限制输出 $limit $skip
db.collection_name.aggregate([
    {$sort:{"age":1}},
    {$limit:10},
    {$skip:10}
]);

//数组进行拆分 $unwind
//只针对数组有作用,拆分后,1条数据将会变为数组个数的数据条数
db.users.aggregate([
    {$match:{"data":{$exists:true}}},
    {$unwind:"$data"}
]);

数据库安全

  • 首先以无密码形式登录
  • 创建管理员密码,
use admin;

//添加一个超级管理员
db.createUser({user:"admin",pwd:"password",roles:["root"]});
  • 验证密码
// 必须在admin库下才能正常执行
db.auth('admin', 'password');
  • 重启mongodb服务(不单单只是重启,如果安装了windows的服务,需要重新安装windows服务)
//关闭mongo服务,然后重新启动
mongod --dbpath "d:\mongodb\db\" --logpath "d:\mongo\log\mongo.log" --auth

//如果安装了MongoDB的windows服务,需要先卸载windows服务
//需要确定windows服务的名称是否为mongodb

net stop mongodb

sc delete mongodb

mongod --dbpath "d:\mongodb\db\" --logpath "d:\mongo\log\mongo.log" --install --serviceName "MongoDB" --auth

注意,开启了验证用户身份(--auth)匿名用户仍然可以登录,但是不能查询、操作任何数据。

  • 为某个库添加指定的管理员,添加的管理员只能访问某个库
db.createUser({user:"root",pwd:"root", roles:[role:"dbOwner", db:"db_name"]});

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值