zoukankan      html  css  js  c++  java
  • mongoDB

    前期:

    启动:sudo service  mongod start

    停止:sudo service mongond stop

    重启:sudo service mongod restart

    查看是否启动成功:ps ajx|grep mongod

    配置文件的位置: /etc/mongod.conf

    默认端口:27017

    日志的位置:/var/log/mongodb/mongod.log

    基础命令:

    查看当前的数据库:db
    查看所有的数据库:show dbs / show  databases
    切换数据库:use db_name
    删除当前的数据库:db.dropDatabase()

    数据类型:

    Object ID: 文档ID
    String: 字符串,必须是有效的UTF-8
    Boolean: 存储一个布尔值,true或false
    Integer: 整数可以是32位或64位,取决于服务器
    Double: 存储浮点值
    Arrays: 数组或列表, 多个值存储到一个键
    Object: 用户嵌入式的文档,即一个值唯一个文档
    Null: 存储Null值
    TimesTamp: 时间戳
    Data: 存储当期日期或时间的UNIX时间格式

    注意点:

    创建日期语句如下:参数的格式为YYYY-MM-DD。eg: new Data("2017-12-20")

    每个文档都有一个属性,为_id, 保证每个文档的唯一性,也可以自己设置_id插入文档,如果没有提供,那么MongDB为每一个文档提供一个独特_id,类型为ObjectID。

    objectID是一个12字节的十六进制数:
         前4个字节为当前时间戳
         接下来3个字节的机器ID
         接下来的2个字节中MongoDB的服务进程id
         最后3个字节是简单的增量值

    mongodb中没有表的概念,集合相当于MySQL中的表。集合不用手动创建,向不存在的集合中第一次加入数据时,集合会被创建出来。

    手动创建集合:

    db.createCollention("sub",{capped:true, size:10})

    “sub”为集合名。

    参数capped: 默认值为false表示不设置上限,值为true表示设置上限。

    参数size: 当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节。

    查看集合:show collections

    删除集合:db.集合名称.drop(), eg: db.sub.drop()

    保存集合:db.集合名称.save()

    mongodb插入数据:

    db.collection.insert({})插入数据,_id 存在就报错。

    db.collection.save({})插入数据,_id存在会更新。

    eg:

    db.test.insert({"name":"xiaoming","age":10}) # test中插入一条数据

    mongodb更新操作:

    db.test.update({name:"xiaoming"},{name:"xiaozhao"}) #把name为xiaoming的数据替换为{name:"xiaozhao"}
    db.test.update({name:"xiaoming"},{$set:{name:"xiaozhao"}}) # 把name为xiaoming的数据替换为{name:"xiaozhao"}
    db.test.update({name:"xiaoming"},{$set:{name:"xiaozhao"}},{multi:true}) #把name为xiaoming的数据全替换为{name:"xiaozhao"}
    {multi:true}达到更新多条的目的

    mongodb删除

    db.test.remove({name:"xiaohong"},{justOne:true}) #默认会删除满足条件的所有数据,{justOne:true}能达到只删除一条的效果。

    mongodb查询

    find(): 查询
    db.集合名称.find({条件文档})
    
    findOne(): 查询,只返回第一个
    db.集合名称.findOne({条件文档})
    
    pretty(): 将结果格式化
    db.集合名称.find({条件文档}).pretty()

    自定义查询:使用$where后面写一个函数,返回满足条件的数据。

    eg: 查询年龄大于30的学生
    
    db.stu.find({
    $where:function(){
        return this.age>30;}
    })

    注意:在查询结果中,可以只返回自己所需的字段 

    db.集合名称.find({},{字段名称:1})
    
    eg: db.stu.find({},{_id:0,name:1,gender:1}) # 显示name,gender字段

    除_id字段,其他字段不显示 就不写,_id字段默认显示,_id:0:表示不显示。

    比较运算符

    等于:默认是等于判断,没有运算符

    小于:$lt (less than)

    小于等于: $lte (less than equal)

    大于:$gt (greater than)

    不等于: $ne

    eg:

    db.test.find(age:{$age:18}) # 查询年龄为18的数据

    范围运算符:

    $in 在某个范围内,$nin 不在某个范围内。

    eg:

    db.test.find({age:{$in:[18,28,38]}}) # 查询年龄为18,28,38的数据。

    逻辑运算符:

    and:在json中写多个条件即可。

    db.test.find({age:{$gte:18},gender:true}) # 查询年龄大于或等于18,并且性别为true的数据

    or:使用$or,值为数组,数组中每个元素为json

    db.test.find({$or:[{age:{$gte:18},{gender:true}}],name:"xiaohong"}) # 查询年龄大于或等于18或性别为true,并且姓名为“xiaohong”的数据

    支持正则表达式:使用//或$regex编写正则表达式

    eg:查找姓名以“ming”结尾的数据
    db.stu.find({name:{$regex:
    "ming$"}})
    db.stu.find({name:{$regex:/ming$/}})

    函数:

    limit():用于读取指定数量的文档

    eg: 查询2条学生的信息
    db.stu.find().limit(2)

    skip(): 用于跳过指定数量的文档

    eg: 跳过前两个学生信息
    db.stu.find().skip(2)

    # 同时使用limit()与skip()
    db.stu.find().skip(5).limit(4) # 查询6-9这四个学生的数据

    sort():  用于对集合进行排序

    db.集合名称.find().sort({字段:1,...}) #参数1位升序,-1为降序。
    eg: 根据性别降序,再根据年龄升序
    db.stu.find().sort({gender:-1,age:1})

    count(): 用于统计结果个数

    db.集合名称.find({条件}).count()
    eg: db.stu.find({gender:true}).count()
    
    db.集合名称.count({条件})
    eg: db.stu.count({gender:true})

    distinct() 对数据进行去重

    db.集合名称.distinct("去重字段", {条件})
    
    eg: db.stu.distinct("hometown",{age:{$gt:18}}) #年龄大于18岁的学生都来在于哪个家乡

    数据的备份与恢复:

    备份:mongodump -h dbhost -d dbname -o dbdirectry

    -h: 服务器地址,也可以指定端口号

    -d: 需要备份的数据库名称

    -o: 备份数据的存放位置

    eg:
    mongodump -h 192.55.63.88:27017 -d test -o ~/Desktop/testbak

     数据恢复:

     mongorestore -h dbhost -d dbname --dir dbdirectory

    -h: 服务器地址

    -d: 需要恢复的数据库实例

    --dir: 备份数据所在的位置

    eg: mongorestore -h 192.55.63.88:27017 -d test1 --dir ~/Desktop/testbak/test

    聚合aggregate 

    聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个有多个阶段 (stage)组成的管道,可以对每个阶段的管道进行

    分组、过滤等功能,然后经过一系列的处理,输出相应的结果。

    db.集合名称.aggregate({管道:{表达式}})

    在mongodb中,文档处理完毕后,通过管道进行下一次处理。常用管道如下:

    $group: 将集合中的文档分组,可用于统计结果

    $match: 过滤数据,只输出符合条件的文档

    $project: 修改文档的结构,如重命名、增加、删除字段、创建计算结果

    $sort: 将输出文档排序后输出

    $limit: 限制聚合管道返回的文档数

    $skip: 跳过指定数量的文档,并返回余下的文档

    $unwind: 将数组类型的字段进行拆分

    注意:$group 对应的字典中有几个键,结果中就有几个键;分组依据需要放到'_id'后面;取不同的字段值需要使用$,'$age','$gender';取字典嵌套的字典中的值的时候‘$_id.country’

    常用表达式: (语法:表达式:'$ 列名')

    $sum:  计算总和,$sum:1表示以一倍计数

    $ avg: 计算平均值

    $min: 获取最小值

    $max: 获取最大值

    $push: 在结果文档中插入值到一个数组中

    $first: 根据资源文档的排序获取第一个文档数据

    $last: 根据资源文档的排序获取最后一个文档数据

    eg1: 按gender进行分组,获取不同组的数量与平均年龄
    db.stu.aggregate({$group:{_id:"$gender",cpunt:{$sum:1},avg_age:{$avg:"age"}}})
    
    eg2: 按照hometown进行分组,获取不同组的平均年龄
    db.stu.aggregate({$group:{_id:"hometown",mean_age:{$avg:"$age"}}})

    group by null 将集合中所有文档分为一组。

    eg: 求学生总人数、平均年龄
    db.stu.aggregate({$group:{_id:null,counter:{$sum:1},avg_age:{$avg:'$age'}}})

    $project: 修改输入文档的结构,如重命名、增加、删除字段、创建计算结果。

    eg: 查询男生、女生人数,输出人数
    db.stu.aggregate({$group:{_id:'$gender',counter:{$sum:1}}}{$project:{_id:0,counter:1}})

    $match  用于过滤数据,只输出符合条件的文档 (match 是管道命令,能将结果交给后一个管道,但是find不可以)

    eg: 查询年龄大于20的男生、女生人数
    db.stu.aggregate({$match:{age:{$gt:20}}},{$group:{_id:'$gender',counter:{$sum:1}}})

     $sort 将输入文档排序后输出

    eg: 查询男生、女生人数,按人数降序排列
    db.stu.aggregate({$group:{_id:'$gender',counter:{$sum:1}}},{$sort:{counter:-1}})

    $limit限制聚合管道返回的文档数

    eg:查询2条学生信息
    db.stu.aggregate({$limit:2})

    $skip 跳过指定数量的文档,并返回余下的文档

    eg: 统计男生、女生人数,按人数升序,取出第二条数据
    db.stu.aggregate({$grop:{_id:'$gender',counter:{$sum:1}}},{$sort:{counter:1}},{$skip:1},{$limit:1})

    注意:先写skip,再写limit

    $unwind 将一个文档中的某一个数组类型字段拆分为多条,每一条包含数组中的一个值

    eg:
    db.t2.insert({_id:1,item:'T-shirt',size:['S','M','L']})
    db.t2.aggregate({$unwind:'$size'})
    
    输出:
    {"_id":1,"item":'T-shirt',"size":'S'}
    {"_id":1,"item":'T-shirt',"size":'M'}
    {"_id":1,"item":'T-shirt',"size":'L'}

    db.集合名称.aggregate({$unwind:{patrh:"$字段名称",preserveNillAndEmptyArrays:<boolean>}})

    preserveNillAndEmptyArrays为true时,保留属性值为空的文档。

    索引:提升查询速度(默认情况下索引字段的值可以相同)

    语法:db.集合名称.ensureIndex({属性:1}),1表示升序,-1表示降序

    创建唯一索引(索引值唯一):

    db.t1.ensureIndex({"name":1},{"unique":true})

    创建联合索引:

    db.t1.ensureIndex({name:1,age:1})

    查看当前集合的所有索引:

    db.t1.getIndexes()

    删除索引:

    db.t1.dropIndex({'索引名称':1})

  • 相关阅读:
    设计模式(二十)---迭代器模式
    设计模式(十九)---观察者模式
    设计模式(十八)---模板方法模式
    设计模式(十七)---策略模式
    ElasticSearch 安装
    MongoDB进击 Linux单机安装
    List集合去除重复对象。。。记录一下
    Springboot整合mybatisPlus实现分页
    git记录
    Springboot异常处理errorController
  • 原文地址:https://www.cnblogs.com/-hao-/p/14891390.html
Copyright © 2011-2022 走看看