1.Mongo管理

1.启动mongo
    mongod -f conf/mongo.conf
2.关闭Mongo
    方式1(Server本地执行命令):
        mongod --port=27017 --dbpath=data --shutdown
    方式2(127连接Mongo的admin库下执行命令):
        use admin 
        db.shutdownServer()
3.Mongo Shell执行JS脚本
    load("/xx/xxx/xxx.js")

2.数据库操作

切换数据库,如果不存在则创建之:
    use {xxx}
查看所有数据库:
    show dbs
    说明:刚创建的数据库xxx并不在数据库的列表中, 要显示它,我们需要向xxx数据库插入一些数据.
查看当前正在使用的数据库
    db
删除当前数据库
    db.dropDatabase()

3.集合操作

查看已有集合
    show collections
    show tables
创建集合
    db.createCollection(name, options)
    说明:当集合不存在时,向集合中插入文档也会创建集合
删除集合
    db.{xxx}.drop()
查看集合状态
    db.{xxx}.stats()

         说明:创建集合时可选参数option选项如下:集合操作

mongo使用java ReadPreference mongo使用教程_条件查询

4.安全相关

查看当前数据库的用户列表
    show users
查看当前数据库的角色列表
    show roles
创建应用数据库的用户
    db.createUser({user:"test",pwd:"test",roles:["dbOwner"]})

管理员操作
    说明:管理员用户操作需要在admin库执行
        创建管理员
            use admin
            db.createUser({user:"test",pwd:"test",roles:["root"]})

说明:不同数据库的用户相互独立。

        说明:

启用鉴权,生产环境需要以鉴权模式启动MongoDB:

mongod -f conf/mongo.conf --auth

                此时客户端连接时,需要认证:

mongo 127.0.0.1:27017 -u test -p test --authenticationDatabase=test123

5.增删改查 

基础语法:

插入文档
    db.collection.insertOne( <document>, { writeConcern: <document> } )
        writeConcern:决定一个写操作落到多少个节点上才算成功,默认为 1
            0:不关心是否写入成功
            1~n: 指定节点数写入成功
            majority: 大部分节点写入成功
    db.collection.insertMany(<document>, {writeConcern: <document>,ordered: <boolean>} )
        ordered:指定是否按顺序写入,默认 true,按顺序写入
     
查询
    db.collection.find(query, projection) 
        命令选项:    
            findOne:查询第一个个文档。
            findMany:查询多个文档。
        query:查询条件
        update:投影操作,指定返回的key

更新文档
    db.collection.update(query,update,options)
        命令选项:    
            updateOne:更新单个文档(部分更新,只更新传入字段)。
            updateMany:更新多个文档(部分更新,只更新传入字段)。
            replaceOne:替换单个文档(全量更新)。
        query:描述更新的查询条件;
        update:描述更新的动作及新的内容;
        options:描述更新的选项
            upsert: 可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
            multi: 可选,是否按条件查询出的多条记录全部更新。 默认false,只更新找到的第一条记录
            writeConcern :可选,决定一个写操作落到多少个节点上才算成功。
        
删除文档
    db.collection.remove(query,justOne)
        justOne:为true时仅删除符合条件的第一条记录

    推荐使用 deleteOne() 和 deleteMany()
        db.collection.deleteMany ({}):删除所有
        db.collection.deleteMany ({query}):删除query条件的所有文档
        db.collection.deleteMany ({query}):删除query条件的一个文档

操作时报错,可能和版本有关
    修改并返回
        db.collection.findAndModify()
        db.collection.findOneAndUpdate()
    删除并返回
        db.collection.findOneAndDelete()

插入操作

        插入单个文档

db.user.insertOne( {userName:"马超",age:33,weapon:"亮银枪"} )


    插入多个文档   


db.user.insertMany(
[
    {userName:"关羽",weapon:"青龙刀"},
    {userName:"赵云",weapon:"亮银枪"}
]
)

插入操作

         基础查询:全量查询 

mongo使用java ReadPreference mongo使用教程_mongodb_02

投影操作查询:不显示主键ID,只显示userName

mongo使用java ReadPreference mongo使用教程_字段_03

        条件查询:查询条件:age>30

mongo使用java ReadPreference mongo使用教程_数据库_04

        条件查询:userName=关羽 或 age=24

mongo使用java ReadPreference mongo使用教程_字段_05

        条件查询:userName=张飞 且 age=24

mongo使用java ReadPreference mongo使用教程_数据库_06

         条件查询:in

mongo使用java ReadPreference mongo使用教程_数据库_07

         排序

mongo使用java ReadPreference mongo使用教程_字段_08

         分页:每页返回2条,返回第二页 

mongo使用java ReadPreference mongo使用教程_数据库_09

        模糊查询

mongo使用java ReadPreference mongo使用教程_字段_10

        模糊查询:忽略大小写

mongo使用java ReadPreference mongo使用教程_条件查询_11

删除操作 

        删除单个文档:name=Hero1的一个文档

db.test.deleteOne({name:"Hero1"})

         删除多个文档:ip="192.168.2.1"的所有文档

db.test.deleteMany({ip:"192.168.2.1"})

        删除多个文档:删除集合下的所有文档

db.test.deleteMany({})

返回被删除文档

mongo使用java ReadPreference mongo使用教程_mongodb_12

更新操作

mongo使用java ReadPreference mongo使用教程_字段_13

        更新单个文档

db.user.updateOne({userName:"关羽"},{$inc:{age:1}})
    更新username=关羽的记录,使其age+1

db.user.updateOne({userName:"赵云"},{$set:{age:22}})
    更新username=赵云的记录,使其age=22

        更新多个文档 

db.test.update({ip:{$regex:"hero",$options:"$i"}},{$set:{abc:123}},{"multi":true})
    已过期,不推荐使用
db.test.updateMany({ip:"192.168.0.1"},{$set:{abc:123}})
    推荐使用,对IP=192.168.0.1的记录,更新字段abc为123,如果abc字段不存在则创建之

        替换更新

mongo使用java ReadPreference mongo使用教程_条件查询_14

         更新不存在则创建之

mongo使用java ReadPreference mongo使用教程_数据库_15

         更新并返回更新后的记录

db.people.findAndModify({
    query: { name: "Pascal", state: "active", rating: 25 },
    sort: { rating: 1 },
    update: { $inc: { score: 1 } },
    upsert: true,
    new: true
})

6.聚合操作

1)单一聚合

mongo使用java ReadPreference mongo使用教程_mongodb_16

 

mongo使用java ReadPreference mongo使用教程_数据库_17

 

mongo使用java ReadPreference mongo使用教程_条件查询_18

mongo使用java ReadPreference mongo使用教程_条件查询_19

2)聚合管道

1.常用操作

        1)聚合管道

操作

描述

SQL

$match

过滤

where

$project

投影

as

$sort

排序

order by

$group

分组

group by

$skip/$limit

分页

limit ... from ...

$lookup

左外连接

left out join

$unwind

打平数组

$graphLookup

图搜索

$facet/$bucket

分面搜索

{
  $unwind:
    {
      path: <field path>,
      includeArrayIndex: <string>,  
            #可选,一个新字段的名称用于存放元素的数组索引。该名称不能以$开头。
      preserveNullAndEmptyArrays: <boolean> 
            #可选,default :false,若为true,如果路径为空,缺少或为空数组,则$unwind输出文档
 } }

        2)分组相关操作

操作

描述

$avg

求平均

$first

返回每组的第一个文档

$last

返回每组的最后一个文档

$max

返回分组中指定字段的最大值

$min

返回分组中指定字段的最小值

$push

将指定的表达式的值加入数组中

$addToSet

将指定的表达式的值加入到集合中(无序、无重复)

$sum

计算总和

$stdDevPop

返回输入值的总体标准偏差

$stdDevSamp

返回输入值的样本标准偏差

        默认情况下,分组阶段的内存限制为100M。如果 分组阶段超过此限制, 将产生错误。


        大数据量分组处理,可将allowDiskUse选项设置为 true, 以启用 $group 操作以写入临时文件。


2.聚合管道语法


pipeline = [$stage1, $stage2, ...$stageN];
    db.collection.aggregate(pipeline, {options})

3.操作样例

mongo使用java ReadPreference mongo使用教程_mongodb_20

mongo使用java ReadPreference mongo使用教程_字段_21

mongo使用java ReadPreference mongo使用教程_数据库_22

mongo使用java ReadPreference mongo使用教程_数据库_23

 

mongo使用java ReadPreference mongo使用教程_数据库_24

mongo使用java ReadPreference mongo使用教程_数据库_25

mongo使用java ReadPreference mongo使用教程_条件查询_26

mongo使用java ReadPreference mongo使用教程_数据库_27

mongo使用java ReadPreference mongo使用教程_条件查询_28

mongo使用java ReadPreference mongo使用教程_字段_29