欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MongoDB个人简单总结

程序员文章站 2022-05-17 14:50:05
当同一个变量被连续插入两次会出现id相同的异常,但是同样内容的两个变量同时插入不会有问题,可能是同一个变量同一个地址生成id相同,导致异常。 默认登陆不需要用户名密码认证,需要密码认证登陆需要在admin数据库user集合添加用户,并且以需要认证的方式启动,mongodb --auth,如果初始没有 ......

  当同一个变量被连续插入两次会出现id相同的异常,但是同样内容的两个变量同时插入不会有问题,可能是同一个变量同一个地址生成id相同,导致异常。

  默认登陆不需要用户名密码认证,需要密码认证登陆需要在admin数据库user集合添加用户,并且以需要认证的方式启动,mongodb --auth,如果初始没有添加用户以该方式启动依然可以随意登陆,因为如果不这样就会无法登陆。
  添加超级用户后直接访问别的数据(mongo dbbaes),依然无法访问,超级用户可以登录admin后再访问别的任何数据库,而无法直接访问别的数据库,可以用超级用户给其他数据库添加用户,方式一样,需要先进入对应数据库。
  每条记录会有一个主键_id,可以自己设置可以默认系统的,不能重复。
  程序插入记录时,同一个对象如果被同一次内插入了两次,则会报错,主键重复,但是内容可以重复。
  非认证方式启动,用不用用户名密码都可以访问,不能用错的。
  另外非正常情况下链接不报错,但执行具体的操作就会报错,具体原因没有深查。
  认证方式启动必须用户名密码登陆。

  mongodb在某个不正当操作下会导致操作某个集合报 syntaxerror: unexpected token illegal 的错误,无论查询删除皆是如此,但是用js代码的方式可以解决; 例如 var c =db.getcollection(‘player’);c.drop();

mongodb设计模式:
  优先考虑内嵌:比如一个人有几个手机号,这种对应数据少的情况下用内嵌足以;比如一个人有几个手机号,这种对应数据少的情况下用内嵌足以;
  后考虑引用:但是如果是一个明星对应几万条留言,则考虑引用,因为内嵌在一个文档里会超过16m限制。这个时候你可以考虑使用引用的方式,在主表里存储一个id值,指向另一个表中的 id 值。
  使用引用要注意的就是:从性能上讲,一般我们可能需要两次以上才能把需要的数据取回来。更加重要的是:需要把数据存放到两个集合里,但是目前为止mongodb并不支持跨表的事务性,所以对于强事务的应用场景要谨慎使用。

mongodb索引:
  mongodb有一个ttl索引,定义在date类型或者数组中有date类型的单字段上,可以用来删除过期数据。

  mongodb集合添加一个字段 db.000001_day.update({}, {$set: {sid: 4}}, {multi: 1})

linux安装mongodb
  curl -o https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz 下载
  tar -zxvf mongodb-linux-x86_64-3.0.6.tgz 解压
  mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb 移动到指定目录
  export path=/data/mongodb/mongodb-linux-x86_64-3.0.6/bin:$path 添加path路径
  mkdir -p /data/db 创建mongodb默认的启动数据库路径

  数据库用户角色:read、readwrite;
  数据库管理角色:dbadmin、dbowner、useradmin;
  集群管理角色:clusteradmin、clustermanager、clustermonitor、hostmanager;
  备份恢复角色:backup、restore;
  所有数据库角色:readanydatabase、readwriteanydatabase、useradminanydatabase、dbadminanydatabase
  超级用户角色:root
  // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbowner 、useradmin、useradminanydatabase)
  内部角色:__system