mongodb--知识点

 文档型数据库,数据接口BSON,最像关系型数据库的非关系型数据库

一、sql数据库与nosql数据库区别

数据类型

应用场景:社交、游戏、物流、物联网、视频直播

数据量大    tb  pb

写入操作频繁

价值比较低,对事物性要求不高

不适合复杂join

适合水平扩展

优点:

1、高性能

2、高可用

3、高扩展

4、丰富的查询

二、nosql数据库分类

1、键值数据库

2、列存储数据库

3、文档型数据库

4、图形数据库

三、启动

配置环境变量

启动服务

mongod  --dbpath D:MongoDB

客户端链接服务端

mongo ip:27017

mongo admin -u 用户名 -p 密码

mongo 127.0.0.1:27017/test -u user -p 123456

show dbs   查看有哪些数据库

show collections  查看数据库中的表

use admin

show users    查看有哪些用户

查询表数据

db.user.find()

and

db.col.find({"by":"菜鸟教程", "title":"MongoDB 教程"})

db.user.find({"age":{$lte:30,$gte:20}})

or

db.user.find({$or:[{"age":20},{"age":10}]})

模糊查询

db.user.find({name:/张/})

以张开头的

db.user.find({name:/^张/})

指定列查询   只查询name 列

db.user.find({},{name:1})

排序

升序

db.user.find({}).sort({"age":1})

降序

db.user.find({}).sort({"age":-1})

分页查询5条数据

db.user.find({}).limit(5)

查询从第几条到第几条

从第3条开始查询5条

db.user.find().skip(2).limit(5)

db.user.find().skip(0).limit(5)

查询条数

db.user.find().count()

更新表数据

db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}})

不加条件  改第一条

db.user.update({},{$set:{'age':5}})

不加set   替换

db.col.update({'title':'MongoDB 教程'},{'title':'MongoDB'})

删除表   集合

db.user.drop()

删除数据库

db.dropDatabase()

删除数据   删除年龄等于30的数据

db.user.remove({"age",30})

查询集合的索引

db.user.getIndexes()

删除索引

db.user.dropIndex({"name":1})

查看查询语句的执行

db.user.find().explain("executionStats")

设置索引     给name列设置索引

db.user.ensureIndex({"name":1})

设置复合索引     name索引按升序存储,age索引按降序存储

db.user.ensureIndex({"name":1,"age":-1})

唯一索引      值必须唯一   类似主键

db.user.ensureIndex({"userid":1},{"unique":true})

四、mongo权限

可以给每一个库设置管理员

创建超级管理员

1、use admin

2、 

db.createUser({

user:'admin',

pwd:'123456',

roles:[{role:'root',db:'admin'}]

})

db  是指哪个库

3、修改配置文件

bin/mongod.cfg

security:

authorization:enabled

//查看当前库下的用户

show users

删除用户

db.dropUser("aaa")

修改用户密码

db.updateUser("admin",{pwd:"1212"})

密码认证

db.auth("admin","password")

五、数据库表与表的关系

1、一对一的关系

2、一对多的关系

3、多对多的关系

六、聚合管道:对集合中的文档进行变换和组合

表达式描述实例
$sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])

只查询trade_no,all_price列   并且条件为all_price>=90的数据

db.user.aggregate([

    {

      $project:{trade_no:1,all_price:1}

     },

     {

      $math:{"all_price":{$gte:90}}

      },

      {

      $sort:{"all_price":-1}

      },

      {

      $limit:1

      }

])

分组

db.user.aggregate([

    {

      $group:{_id:"$order_id",total:{$sum:"$price"}}

     }

   

])

_id   total

1     9

表关联

db.order.aggregate([

   {

    $lookup:

           {

             from:"order_item",

             localField:"order_id",

             foreignField:"order_id",

             as:"items"

           }

    }

])

七、数据库的导入导出

导出

mongodump -h dbhost -d dbname -o dbdirectory

mongodump -h 127.0.0.1:21070 -d test -o c:/path

导入:

monorestore -h dbhost -d dbname path

原文地址:https://www.cnblogs.com/jentary/p/12333353.html