mogonDB基本操作命令

1,连接:
    1.    mogodb://mongodb的登录:usernanme:密码@host(地址):端口号。
    2,连接多台服务器:    mongodb://服务器1:端口号1,服务器2:端口号2
    3,连接replica set三台服务器    mongodb://localhost(本机,默认端口27017),localhost:27018,localhost:20719
2,创建数据库
    1,use databasename;if已经存在则切换到指定数据库;show dbs:查询所有数据库的命令;新建的数据库需要插入一条数据才能显示出来。
3,删除数据库:db.dropDatabase():删除当前数据库。
4,集合(即数据库中表的删除)的删除。db.collection.drop();db.指定表名.drop;
5,集合的创建:格式:db.createCollecion(name,options);name:集合名称,options:可选参数,指定有关内存大小及索引的选项。
    show collections:查看已有集合;
    创建固定集合的用法:db.createCollection("name",{capped(if为true,必须指定大小):true,aotoIndexId(自动在_id字段创建索引):true,size(集合大小):6142800,max(文档最大个数,即行):10000})
6,向集合中插入文档:关键字不带引号,值带单引号。更新时都要带单引号。
    db.集合名.insert(document):可以insert(key:value,key1:value2。。。)也可以var document=({key:value,key1,value1...});insert(document)的方式插入;
    每条文档有一个默认的_id;一个大括号为一条数据
7,更新集合中的文档,格式:db.collection.update(,,{upsert,multi:,writeConcern:})
    query代表:update的查询条件,类似where后面的语句;update代表更新的操作符,set后面的语句;upsert:bool型代表if不存在是否插入新的。multi:默认为false,代表只更新查找到的第一条数据,true为全部更新
    writeConcern:可选,抛出异常的级别。
    实例:db.col.update({'title':‘MongoDB 教程’},{$set:{‘title’:'MongoDB'}});将key_value,title:MongoDB 教程改成了title:MongoDB
    db.collectin.save(,{wreiteConcern:})
8,文档的删除:db.col.remove({}):删除所有文档;db.col.remove({document},1):删除一条记录;官方文档新用法:db.inventory.deleteMand({}):删除集合下所有文档;
    db.inventory.deleteMany({status:"A"}):删除status等于A的所有文档;db.inventory.deleteOne({status:"A"}):删除status等于A的一条文档;
9,db.collection.find(query,projiection);query:可选,使用查询操作符,指定查询条件;projection:可选,查询时返回文档所有的健值;
    db.col.find().pretty():pretty():以易读的方式读取数据
    db.col.find().pretty():查询集合中的所有文档;findone:返回一个文档。查询等于:db.col.find({"by":"mongodb"}).pretty();等价于 where by='mongodb'
    查询大于等于:db.col.find({"likes":{$gte:50}}).pretty();等价于where likes>=50;查询条件要单独放在一个大括号里
    查询and条件:db.col.find({key1:value1,key2,value2}).pretty();多个查询条件存入一个大括号中;
    查询or条件:使用or关键字:db.col.find({$or:[{key1:value1},{key2,value2}]}).pretty();多个查询条件存入一个中括号中;
    AND和OR联合使用: db.col.find({"likes":{$gt:50}},$or:[{key1,value1},{key2,value2}]}).pretty()
    projection的使用情况:db.collection.find(query,{key1:1,key2,:1})指定返回的健,if为0指定不返回的健;要不全为1,或全为0;不可混用;
    db.collection.find(query,{_id:0,title:1,by:1});指定_id为0,隐藏_id;
10,条件查询:db.col.find({likes:{$lte|$gte|$lt|$gt:150}})查询likes大于/小于/等于150的记录
        模糊查询:db.col.find({key:/教/});查询key包含教字的文档;db.col.find.({/^教/});db.col.find.({/教$/});分别查询教字开头和结尾的文档
11,按数据类型条件查找:db.col.find({"title":{$type:2|'string'}});查询title类型为字符串的文档;2是字符串类型在mongdb中的编号;
12,查询中limit()和skip()的用法:db.col.find({},{key1:1,_id:0}).limit(2).skip(1);查找包含key1的两条记录跳过第一条;
13,排序:db.col.find().sort({key:1|-1});查找所有数据,按key升序排列;-1为降序;
14,创建索引:db.col.createIndex({"key1":1,key2:-1});创建复合索引:key1升序,key2降序;
15,db.col.getIndexes():查看集合索引;db.col.totalIndexSize():查看集合索引大小;db.col.dropIndexs():删除集合所有索引;db.col.dropIndex(“索引名称”):删除指定索引
16,聚合:aggregate:主要用于处理数据(如:统计平均值,求和等),并反回计算后的数据结果类似于count(*)
    db.col.aggregate([{$group:{_id:"$bu_user",num_tutorial:{$sum:1}}}])类似于select by_user count(*) from mycol group by by_user;计算么个作者写的文章数
    $sum|avg|min|max|addToSet|first|last ;db.col.aggregate({$group:{_id:"$by_user",num_tutorial:{$sum:"$likes"}}})
17,mongodb中的聚合管道:
    $project:修改输入文档的结构。可以用来重命名,增加删除域也可以用来创建计算结果以及嵌套文档:可以用来指定筛选哪几个字段。
    $match:用于过滤数据,只输出复合条件的文档。$match使用mongodb的标准查询操作;db.col.aggregate([{$match:{socre:{$gt:70,$lt:90}}},{$group:{_id:null,count:{$sum:1}}}]);
    获取指定范围数据,将符合记录送到下一阶段进行处理
    $limit:用于限制聚合管道中返回的文档数
    $skip:跳过指定数量的文档,并返回余下的文档
    $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
    $group:将集合中的文档分组,可用于统计结果。
    $sort:将输入文档排序后输出
    $geoNear:输出接近某一地理位置的有序文档
18,复制原理:一个主负责处理客户端的请求,其余是从节点,负责复制主节点的数据。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作
    副本集的特征:n个节点的集群,任何节点可作为主节点,所有写入操作都在主节点上,自动故障转移,自动恢复。
19,分片:在mongodb里存在另一种集群,就是分片技术可以满足数据量大量增长的需求,当mongodb存储海量数据时,一台机器不足以存储数据,也可能不足以提供可接受的读写吞吐量。可通过在多台机器上
分割数据,使得数据库系统存储和处理更多的数据
20,为什么使用分片:复制所有的写入操作到主节点。延迟的敏感数据会在主节点查询。单个副本集限制在12个节点。当请求量巨大时会出现内存不足。本地磁盘不足。垂直扩展价格昂贵。
shard:存储实际的数据块config server:mongod实例,存储了整个clusterMetaData,其中包含chunk信息。Query Routers前端路由,客户端由此接入,让整个集群看上去像单一数据库
21:数据库备份:mongodb -h dbhost -d dbname -o dbdirectory
    -h:数据库所在服务器地址,-d:需要备份的数据库实例。-o: 备份的数据存放的位置。
    数据库的恢复:mongoretore -h <:port> -d dbname
    -h:数据库服务器所在地址及端口号 -d:需要恢复的数据库实例。mongostat:查看状态,mongotop:提供每个集合的水平的统计数据。默认情况下每一秒返回一次
22,mongodb的关系表示多个文档之间在逻辑上的相互联系。可以通过嵌入和引用建立联系。
    user的文档结构: {_id:value,name:value,contac:value,dob:value} ;address的文档结构:{_id:value,building:vlaue,pincode:value,city:los,stat:Califor}
    嵌入关系:把用户地址嵌入到用户文档中: {_id:value,name:value,contac:value,dob:value,address:[{_id:value,building:vlaue,pincode:value,city:los,stat:Califor},{地址2}]}
    引用式关系:引用式关系是经常用到的关系,这种方法把用户数据文档和用户地址数据文档分开,通过引用文档的id字段来建立关系{_id:value,name:value,contac:value,dob:value,address_id:[地址1,地址2]}
    这种方法需要两次查询:var result=db.users.findOne({name:value},address_ids:1);var address=db.address.find(_id,{$in:result[address_ids]})
23,数据库的引用:手动引用,DBRefs
 在不同的集合中存储不同的地址,在调用不同的地址时,也需要指定集合,一个文档从多个集合引用文档,使用DBRefs
 DBRefs:{$ref:,$id,$db:};$ref:集合名称,$id:引用的id,$db:数据库名称,可选参数;
 24,覆盖索引查询:1,所有的查询字段是索引的一部分,所有的查询返回字段在同一个索引中。由于所有出现在查询中的字段是索引的一部分,因此无需在整个数据文档中检索匹配查询条件和返回使用相同
 索引的查询结果。因为索引存在于RAM中,从索引中获取数据更快。
25,mongodb不支持事务,但是提供了原子操作比如:文档的保存,修改,删除等都是原子操作。
    {$set:{filed:value}};$set用来指定一个建并更新建值,若不存在则创建。{$unset:{field:1}}用来删除一个健;{$inc:{field:value}};用来对文档的某个值为数字型的健进行增减操作
    {{$push:{field:value}}};把value追加到filed里面去,filed一定是数组类型才行,如果不存在则新增加一个数组类型进去。
    {$pushAll:{field:value_array}};一次追加多个值到数组字段内。{$pull:{field:value}};从field内删除一个等于value的值。$addToSet:增加一个值到数组内,只有这个值不在数组内才增加。
    $pop:删除第一个或最后一个元素。{{$rename:{old_field_name:new_field_name}}}:修改字段名称。{$bit:{field,{and:5}}};位操作,integer类型
26,高级索引:文档中包含子文档和数组;索引数组字段:db.col.ensureIndex({key:1});创建索引后,数组key中的每一个字段都具有了索引。
    索引子文档索引:db.col.ensureIndex({key1:1,key2:1,key3:1})为子文档中的三个字段创建了索引。
    db.col.find({key:vlaue}).explain():查看数组key中value的索引。
27,索引占据内存所以有限制,或不使用。集合中索引不能超过64个,索引名的长度不能超过128个字符,一个复合索引最多可以有31个字段
28,对象id(Objectid)共12个字节:前四个字节表示时间戳,接下来三个字节是机器标识码,紧接的两个字节是由进程id组成,最后三个字节是随机数。
29,Objectid("").getTimestamp():将获得时间戳
30,map_reduce是一种计算模型,将大批量的工作数据分解map执行,然后将结果合并成最终结果(reduce)
    基本语法:db.col.mapReduce(
    function() {emit(key,value);},//map函数
    function(key,vlaues) {return reduceFunction},//reduce函数
    {
    out:collection,
    query:document,
    sort:document,
    limit:number
    }
    )
    使用mapreduce函数要实现两个含map函数和reduce函数。map函数调用emit(key,value),遍历collection中所有的记录,将key与value传递给Reduce函数进行处理。
    map函数必须调用emit(key,value)返回键值对。
参数说明:map:映射函数(生成健值对序列,作为reduce函数参数)。reduce统计函数:将key——values变成key-value即将values数组变成一个单一的value
    out:统计结果存放集合(不指定则使用临时集合,在客户端断开后自动删除)。query一个筛选条件,只有满足条件的文档才会调用map函数(query,limit,sort可以随意组合)
    sort和limit结合的sort结合的sort排序参数(发给map函数前给文档排序),可以优化分组机制。
    limit;发给map啊很好的文档的数量上限。
    在集合orders中查找status:"A"的数据,并根据cust_id来分组,并计算amount的总和
实例:db.collection.mapReduce(
        funciton(){emit(this.cust_id,this.amount)};
        function(key,values){return Array.sum(values)},
        {query:{status:"A"},
        out:order_totals
        })
31,创建全文索引:db.posts.ensureIndex({post_test:"test"});对字段post_test建立全文索引,这样可以搜索文章内的内容;
    使用全文索引:db.posts.find({$test:{$search:"runoob"}});db.posts.getIndexs():查找索引名。删除索引名:db.posts.dropIndex(“post_test_test”)
32,支持使用正则表达式查找。
33,界面管理:RockmongoDB
34,GridFS:用于存储和恢复那些超过16M的文件(图片、音频、视频等)它也是文件存储的一种的方式,可以更好的存储大于16M的文件,将大文件对象分割成多个小的chunk片段,每个chunk作为mongodb的一个
文档存储在chunks集合中。GridFs用两个集合来存储一个文件。fs.files和fs.chunks
db.fs.files.find();查看数据库中的文档;根据文件的_id。获取区块的数据。db.fs.chunks.find(files_id:Objectid(""))

    

你可能感兴趣的:(学习笔记)