mongodb【杂】

  1. mongoDB监测工具mongostat

mongostat --host 192.168.1.100:27017 -u root -p 123456 --authenticationDatabase admin

需要修改的就是192.168.1.100:27017这个host和port,改为你开启mongo的连接ip地址和监听端口;

文章一:https://blog.csdn.net/u011186019/article/details/70918288 

7. 慢查询日志

文章一https://blog.csdn.net/wmj2004/article/details/79415892 

文章二https://blog.csdn.net/yisun123456/article/details/78274477 

文章三:

8. mongo分片

docker不认证分片:

文章一https://www.cnblogs.com/jay54520/p/8444218.html 

docker认证分片:

文章一https://blog.csdn.net/guan0005/article/details/86995019 

文章二:https://www.cnblogs.com/hehexiaoxia/p/6192796.html 

 

 

9. Collation特性(排序)

文章一http://www.mongoing.com/archives/3912 

 

在查询的时候指定语言排序规则:db.col.find({}).collation({"locale": "zh", numericOrdering:true}).sort({stock_code:1})

在创建集合的时候就指定好排序规则:db.col.createIndex({name: 1}, {collation: {locale: "zh"}})

当使用collation时,字段locale必须要有值

参数详细介绍: https://docs.mongodb.com/manual/reference/collation/ 

  1. locale: , 指定按何种语言进行排序,中文?英文?等等
  2. caseLevel: , 是否在强度级别1或2中包含案例比较
    1. true:与强度strength:1一起使用时,排序规则比较基本字符和大小写。 当与strength:2一起使用时,排序比较基本字符、变音符号(以及可能的其他次要差异)和大小写。
    2. false: 不包括级别1或级别2的病例比较。默认值为false
  3. caseFirst: , 在强度三级比较期间确定大小写差异排序顺序的字段。“upper”大写在小写之前,“lower”小写在大写之前,“off”默认值
  4. strength: , 比较的强度级别:1-5.
  5. numericOrdering: , 确定是将数字字符串(“123456”)作为数字比较还是作为字符串比较. True:作为数字比较。 False:作为字符串比较
  6. alternate: , 将某些字符排序时添加到排序中(与maxVariable相反),non-ignoreable:空格和标点符号都要被视为基本字符串参与排序,shifted:空格和标点不被视为基本字符串,仅在强度级别大于3时视为基本字符串参与排序
  7. maxVariable: , 哪些字符是可以在排序时被忽略的,可以自己填写,或者用默认值maxVariable:’abc’(punct:空格和标点符号,space:空格)
  8. backwards: 默认false从前到后排序, true从后到前排序

 

  1. 原子操作(插入数据完整性)
  1. $set:更新一个键的值. Update({查询条件},{“$set”:{key:value}});
  2. $unset:删除一个键. {“$unset”:{key:1}}
  3. $inc:对为数值类型的键,增加或减少 {“$inc”:{key:value}}
  4. $push:在一个为数组类型的键,添加一个值,(如果键不存在,创建一个空数组,并将值添加) {“$push”:{key:value}}
  5. $pull:删除为数组类型键中的一个值, {“$pull”:{key:value}}
  6. $addToSet:在数组类型键中增加一个值,此值在数组中不存在才会添加。 {“$addToSet”:{key:value}}
  7. $pop:删除数组类型的第一个或最后一个元素 {“$pop”:{key:1 }} -1是从第一个开始删除, 1是从最后一个开始删除
  8. $rename:重新命名一个字段 {“$rename”:{oldKeyName : newKeyName }}
  9. $bit:位操作 {“$bit”:{key:{and:5}}};
  10. ObjectId

通过Object(“id”).getTimestamp()方法可以获得到这条数据的创建时间。

11.固定集合

一、MongoDB固定集合概念

    固定集合指的是事先创建,并且大小固定的集合。即假设一个集合设置了固定大小为100,再添加一条文档的时候,会把最前面的文档剔除,永远只保留100条数据。

    固定集合特性:固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景。

  二、固定集合应用场景

    比如日志文件,聊天记录,通话信息记录等只需保留最近某段时间内的应用场景,都会使用到MongoDB的固定集合。

  三、如何使用固定集合

    创建固定集合使用命令:db.createCollection("集合名词",{capped:true,size:1000,max:100}); 

capped:true表示该集合为固定集合,size指定集合大小,单位为KB,max指定文档的数量

    当指定文档数量上限时,必须同时指定大小。这是为什么呢?

    答案是:淘汰机制只有在容量还没有满时才会依据文档数量来工作。要是容量满了,淘汰机制会依据容量来工作。 

    结合场景来理解:

    (1)现创建一个c5的固定集合,大小设置为1000kb,文档数量设置为100,编写命令:db.createCollection("c5",{capped:true,size:1000,max:100}); 

    (2)并向集合中插入10条数据:    

 for(var i=0,i<=99;i++){
      db.c5.insert({name:"fuck",age:i})
 }

    (3)查找c5集合的大小:db.c5.count(),却发现实际显示的数量只有56条。

 结论:当存储的数据达到集合大小的上限时,淘汰机制依据容量来工作,通过不断的淘汰前面插入的数据,来满足后面所有数据的插入,所以根据下图可得,c5检索出来的结果,是从age:43开始的。

再来看一个场景   

(1)现创建一个c8的固定集合,大小设置为10000kb,文档数量设置为100,编写命令:db.createCollection("c8",{capped:true,size:10000,max:100});,条件与上个场景差不多,只是大小调整为10000kb

    (2)并向集合中插入100条数据:    

 for(var i=0,i<100;i++){
      db.c8.insert({name:"fuck",age:i})
 }

    (3)再查找c8集合的大小:db.c8.count(),这回的数量达到了预期的100条    

    (4)这时再插入一条数据,也能插入成功,但是再find一把,会发现第一条数据被干掉了

结论:淘汰机制在容量未满的情况下,会对前面的文档进行淘汰,后面插入多少条数据,则最前面相应的淘汰多少条。

  1. 备份与恢

注意!!!:所有<>都不需要加,在这里只做提示作用

你可能感兴趣的:(数据库,mongodb,分片,慢查询,固定集合)