zoukankan      html  css  js  c++  java
  • mongoDB的常用语法

    安装

    到mongodb官网下载安装包或者压缩包:https://www.mongodb.com/download-center?jmp=nav
    1、如果是msi包的话则点击按步骤安装,如果是压缩包的话不用安装;
    2、配置环境变量:将mongodb的bin目录配置到环境变量的path中,或者新建MONGODB_HOME再配置到path中;
    3、新建文件夹作为存放mongo的数据的地方,然后在dos窗口中执行:mongod --dbpath=E:/mongodbIndex (path后面跟要存放数据的文件夹路径),执行完后发现文件夹下有了数据,此步骤同时表示启动了服务端
    4、mongodb默认端口是27017,上面步骤mongod 命令是属于启动mongo服务端命令,启动后不能关闭,否则mongo就关闭了导致链接时出现10061错误,所以要新开启一个窗口执行:mongo localhost:27017,表示客户端连接
    注:mongodb可以不设账号密码,通过IP地址和端口直接链接
     
    退出输入:
    exit
     

    基本概念

    在mongodb中基本的概念是文档、集合、数据库,下面介绍。
    SQL术语/概念 MongoDB术语/概念 解释/说明
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column field 数据字段/域
    index index 索引
    table joins   表连接,MongoDB不支持
    primary key primary key 主键,MongoDB自动将_id字段设置为主键
    MongoDB的默认数据库为"db",该数据库存储在data目录中。
    MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
     

    数据类型

    MongoDB中常用的几种数据类型。
    数据类型 描述
    String 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。
    Integer 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。
    Boolean 布尔值。用于存储布尔值(真/假)。
    Double 双精度浮点值。用于存储浮点值。
    Min/Max keys 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。
    Arrays 用于将数组或列表或多个值存储为一个键。
    Timestamp 时间戳。记录文档修改或添加的具体时间。
    Object 用于内嵌文档。
    Null 用于创建空值。
    Symbol 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。
    Date 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。
    Object ID 对象 ID。用于创建文档的 ID。
    Binary Data 二进制数据。用于存储二进制数据。
    Code 代码类型。用于在文档中存储 JavaScript 代码。
    Regular expression 正则表达式类型。用于存储正则表达式。
     

    mongodb语法

    数据库

    show dbs;//查看所有的数据库
    db;//查看当前窗口所在的数据库
    use 数据库名;//如果数据库不存在,则创建数据库,否则切换到指定数据库。
    注:show dbs执行结果没有看到test库,但是db查看当前库确是test库,因为test库中刚开始没有任何数据并且是在内存中的,有了数据后就会显示出来了(其他新创建的数据库也是如此)
    db.dropDatabase();//删除当前数据库,默认为 test,故要切换到某个数据库下进行删除
     

    集合

    显式创建集合:
    db.createCollection("collectionName");//创建一个名为collectionName的集合,创建完成后会返回 {"ok",1} json串
    隐式创建集合:
    db.collection2.insert({name:"xiaomu",age:20});//往collection2集合中添加数据来创建集合,如果集合不存在就自动创建集合,返回:WriteResult({"nInserted":1})
    show collections;//查看集合
    db.collection1.count();//统计集合collection1中的数据数量
    db.collection1.drop();//删除集合collection1
    注:mongo中支持js,可通过js操作实现批零处理,如:for(var i=0;i<1000;i++){db.collection2.insert({name:"xiaomu"+i,age:20+i});}

    固定集合

    固定集合指的是事先创建而且大小固定的集合。
    固定集合特性:固定集合很想环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制.
    db.createCollection("collectionName",{capped:true,size:10000,max:100});//size指定集合大小,单位为KB,max指定文档数量
    当文档数量上限时必须同时指定大小。淘汰机制只有在容量还没满时才会依据数量来工作。要是容量满了则会依据容量来工作。
     

    查询

    固定条件查询

    注:mongodb中每条数据都有一个id,用来唯一标识一条数据,id由mongo本身来维护
    db.collection1.find();//查询集合中所有的数据
    db.collection1.find({age:7});//查询年龄为7的数据
    db.collection1.find({age:7},{name:1});
    //查询年龄为7的数据,只返回name字段数据;两个大括号,前面的存查询条件,后面的存返回条件,返回条件字段1表示true,表示此字段返回,如果name后面的1改为0则表示不返回name字段,返回除name字段以外的其他字段
    注意:如果设置返回字段有为0的已经表示查询所有除了某字段以外的所有字段就不能再设置某个字段为1了,有语法冲突
    db.collection1.find({age:7,name:"xiaomu"},{name:1,age:1});//查询age为7,name为xiaomu的数据,返回name和age字段
    注:多条件查询此处是并列,但是如果多个条件都相同的话如{name:"xiaoli",name:"xioamu"}则会只查询后一个条件的数据
    db.collection1.find({},{age:1});//查询所有的数据,返回age字段
    db.collection1.findOne();//查询集合的第一条数据

    筛选查询

    gt(greater than)大于;
    lt(less than)小于;
    gte(greater then equal)大于等于;
    lte(less than equal)小于等于;
    ne(not equal)不等于
    db.collection1.find({age:{$gt:10}});//查询age大于10的数据

    包含

    db.collection1.find({price:{$all:[1,2]}});//(包含。。并且包含。。)此处price是个数组,此方法查询所有price包含1和2的数据
    db.collection1.find({price:{$in:[1,2]}});//(包含。。或者包含。。)查询price中含有1或者2的数据
    db.collection1.find({price:{$nin:[1,2]}});//(不包含。。并且不包含。。)查询price中不含有1并且不含有2的数据
    db.collection1.find({$or:[{name:"xiaomu"},{price:{$in:[3]}}]});//(。。或者。。)查询name为xiaomu或者价格包含3的数据
    db.collection1.find({$nor:[{name:"xiaomu"},{name:"xiaoli"}]});//(既不也不)查询name不为xiaomu或者name不为xiaoli的数据

    分页

    db.collection1.find().skip(0).limit(10);//查询从0条开始,查询10条,skip()方法默认参数为 0 ,表示跳过的条数

    排序

    db.collection1.find().sort({age:1});//按照年龄升序排序,为-1的话表示降序排序

    存在

    db.c2.find({hight:{$exists:1}});//查询存在hight字段的数据
     

    删除

    db.collection1.remove({age:7,name:"xiaomu"});//删除age为7,name为xiaomu的数据
     

    更新

    db.c3.update({age:12},{name:"xiaoxiao"});//本意为将age为12的数据中的name更新为xiaoxiao,但是实际效果是只是将age为12的满足条件数据的第一条整条数据覆盖为name:“xiaoxiao”
    db.c3.update({age:15},{$set:{name:"xiaolili"}});//本意为将age为15的数据的name修改为xiaolili,但是实际效果是只修改了查询到的第一条数据
    db.c3.update({age:15},{$set:{name:"xiaolili"}},1,1);//将age为15的数据的name修改为xiaolili
    总共4个参数,第四个参数表示有多条数据符合筛选条件的话是否全部更改,默认为0只改第一条,改为1后表示全部更改
    第3个参数1表示如果没有符合条件的记录是否新增一条记录,1表示新增,0表示不新增
    如:
    db.c3.update({age:21},{$set:{name:"xiaolili"}},1,1);//如果不存在age为21的数据则增加一条,增加的数据为{age:12,name:”xiaolili”}
    db.c3.update({age:12},{name:"xiaoxiao"},{$inc:{age:-2}},1,1);//$inc表示使某个键值加减指定的数值,此处表示将name为xiaoxiao的数据的age字段的值减2
    db.c3.update({age:12},{name:"xiaoxiao"},{$inc:{age:1}},0,1);//$unset用来删除某个键,此处表示删除name为xiaoxiao的数据的age字段
     

    索引

    mongo默认为每条数据的_id字段建索引
    db.c3.ensureIndex({age:1});//为age字段建普通索引
    db.c3.dropIndex({age:1});//删除age字段的索引
    db.c3.ensureIndex({age:1},{unique:true});//为age字段建唯一索引,在为字段建了唯一索引后就不能再添加相同值的记录了
     

    数据备份与恢复

    备份

    mongodump -h dbhost -d dbname -o dbdirectory
    -h:mongodb所在服务器地址,如127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
    -d:需要备份的数据库实例,如:test
    -o:需要备份的数据存放的位置,例如:d:data (如果没有则自动创建)

    恢复

    mongorestore -h dbhost -d dbname -directoryperdb dbdirectory
    -h:mongodb所在服务器地址,如127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
    -d:需要备份的数据库实例,如:test,此名称也可以和备份的时候不一样
    -directoryperdb :备份数据所在的位置,例如:d:data
    注意:恢复时要在退出mongo命令行状态下执行
     

    导入与导出

    导出

    mongoexport -h dbhost -d dbname -c collectionName -o output
    -h:数据库地址
    -d:指明使用的库
    -c:指明要导出的集合
    -o:指明要导出的文件路径加文件名,文件名可以是txt、word、excel等多种文件格式

    导入

    mongoimport -h dbhost -d dbname -c collectionname 文件的地址路径
    -h:数据库地址
    -d:指明使用的库
    -c:指明要导出的集合
    注意:导入时要在退出mongo命令行状态下执行,导入导出与数据备份和恢复相似
  • 相关阅读:
    Golang Failpoint 的设计与实现
    没涉及到最值求解;观点:矩阵乘法无法表达出结果。 现实生活中事件、现象的数学表达
    多元微分学 枚举破解15位路由器密码 存储空间限制 拆分减长,求最值 数据去重
    ARP Poisoning Attack and Mitigation Techniques ARP欺骗 中间人攻击 Man-In-The-Middle (MITM) attack 嗅探 防范 Can one MAC address have two different IP addresses within the network?
    The C10K problem
    HTTP Streaming Architecture HLS 直播点播 HTTP流架构
    现代IM系统中消息推送和存储架构的实现
    现代IM系统中的消息系统架构
    长连接锁服务优化实践 C10K问题 nodejs的内部构造 limits.conf文件修改 sysctl.conf文件修改
    doubleclick cookie、动态脚本、用户画像、用户行为分析和海量数据存取 推荐词 京东 电商 信息上传 黑洞 https://blackhole.m.jd.com/getinfo
  • 原文地址:https://www.cnblogs.com/diandianquanquan/p/12238632.html
Copyright © 2011-2022 走看看