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选项如下:集合操作

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默认不启用鉴权,生产环境需要以鉴权模式启动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:"亮银枪"}
]
)

插入操作

         基础查询:全量查询 

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

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

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

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

         条件查询:in

         排序

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

        模糊查询

        模糊查询:忽略大小写

删除操作 

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

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

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

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

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

db.test.deleteMany({})

         返回被删除文档

更新操作

        更新单个文档

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字段不存在则创建之

        替换更新

         更新不存在则创建之

         更新并返回更新后的记录

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

6.聚合操作

1)单一聚合

 

 

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.操作样例

 

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐