zoukankan      html  css  js  c++  java
  • mongodb(1)mongodb基础入门

    1.安装(centos6.6/mongodb3.6.7)

    1)下载

    https://www.mongodb.com/download-center#enterprise

    2)安装

    tar  -zxvf   文件名 -c 解压的位置

    mkdir  -p  /data/db

    mkdir  -p   /data /logs

    cd  data /logs

    touch  mongo.log

    cd   .../bin

    3)启动服务

    ./mongod  --dbpath=/data/db   --logpath=/data/logs/mongo.log  --fork  --bind_ip=0.0.0.0

    备注:dbpath:db路径 ,logpath;日志文件, --fork守护进程, --bind_ip:0.0.0.0表示所有接口都能连接,这个一定要设置,否则不能远程连接,只能本机连接

    4)gui连接

    nosql manager/Robo 3T,连接方式一样,t填入端口号,ip地址等,--bind_ip:0.0.0.0没有设置那么就会连接不上(注意关闭防火墙)

    2.bin目录下的命令

     mongoexport -d dbname -c collectionname -o file --type json/csv -f field  // 参数说明:-d :数据库名,-c :collection名,-o :输出的文件名,--type : 输出的格式,默认为json,-f :输出的字段,如果-type为csv,则需要加上-f "字段名",-h,--host:代表远程连接的数据库地址,默认连接本地Mongo数据库;--port:代表远程连接的数据库的端口,默认连接的远程端口27017; -u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号; -p,--password:代表连接数据库的账号对应的密码; -q, --query:代表查询条件;  --skip:跳过指定数量的数据; --limit:读取指定数量的数据记录; --sort:对数据进行排序,可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列,如sort({KEY:1})。

    mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field//  参数说明:-d :数据库名,-c :collection名,--type :导入的格式默认json,-f :导入的字段名,--headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段,--file :要导入的文件

    mongod  --dbpath=/data/db   --logpath=/data /logs/ mongo.log  --fork  --bind_ip=0.0.0.0 //启动服务,--shutdown关闭服务,假如是配置文件-f的话,那么在关闭的时候也需要指定-f

    mongo //连接客户端,一般不这样连接,一般使用gui连接

    备注:mongodump与mongoexport区别:

    mongodump可以backup整个数据库,而mongoexport要对每个collection进行操作,最主要的区别是mongoexport输出的json比mongodump的bson可读性更高,进而可以直接对JSON文件进行操作然后还原数据(bson转换json存在潜在兼容问题)。

    3.连接后常用的shell命令

    show  dbs //显示所有的库

    show  collections //显示所有的结合

    show logs //显示所有的日志

    use  数据库//切换数据库,没有就创建,mongodb遵循这个规则,后续不在说明

    exit  //退出

    db.help()//help查看具有的方法,其他的也可以

    备注:mongodb是无模式,对大小写敏感的语言

    4.常用原生方法:

    Date()//创建date对象

    version()//返回版本

    hostname()//返回主机名

    5.用户管理

    1)创建用户

    db.createUser(

        {

          user: "test12357",

          pwd: "12345678",

          roles: [

          { role: "read", db: "local" }

          ]

        }

    )

    备注:不能在use  local下创建,其他可以,默认都是添加在use  admin中,user账户,pwd密码,roles角色,db作用的数据库,roles可选如下角色

    Read:允许用户读取指定数据库

    readWrite:允许用户读写指定数据库

    dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

    userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

    clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

    readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

    readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

    userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

    dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

    root:只在admin数据库中可用。超级账号,超级权限

    2)用户的改,删,查

    db.system.users.find();  //查看所用用户

    db.system.users.remove(条件)//移除某个用户

    db.system.users.update(参数)//修改某个用户权限

    3)登录

    use  库

    db.auth("账户","密码")

    6.常用api

    https://docs.mongodb.com/manual/reference/operator/update/   //百科全书

    1)crud

    use 数据库名//没有就创建

    db.dropDatabase()//删除数据库

    db.user.insert({age:23,adress:"shanghai"})//类似insertOne

    db.user.insert([{name:"lisi",age:24},{name:"lisi",age:25},{name:"lisi",age:26}])//插入多条,;类似insertMany

    var arr=[];for( var i=0;i<10000;i++){arr.push({name:"name"+i,age:i});} db.user.insert(arr)// //批量放入数组后批量插入

    db.user.remove({name:"张三"});//删除全部文档,类似deleteMany ,不会删除集合

    db.user.drop()//删除集合,会删除索引

    db.user.deleteOne({name:"张三"})//删除一条数据

    db.user.update({name:"张三"}, {$set:{age:10}})//默认只修改一条,存在则修改,不存在则添加,相当于updateOne,set不存在会替换该文档的所有内容,id没变

    db.user.updateMany({name:"张三"},{$set:{age:10}})//修改多条,$set表示修改该属性,存在就替换,不存在就添加

    db.user.updateMany({name:"张三"},{age:10})//修改多条,替换文档的所有内容,id没变,其他的都替换掉了

    db.user.findOneAndReplace({age:2},{age:23}) //查找并替换,替换掉所有内容,除了id没变,replace不能包含原子操作(inc,set.unset,mul,rename,min,max等)

    db.user.findOneAndDelete({age:3})//查找并删除

    2)关系运算符

    db.user.find({age:{$in:[3,5]}})//3或者5,类似mysql的in

    db.user.find({age:{$gt:10}})//ge大于10,gte大于等于,ne不等于,lt小于,lte小于等于,

    3)逻辑运算符

    db.user.find({$or:[{age:3},{age:5}]})//or,and会短路,not,,nor

    4)type与exists

    db.user.find({age:{$type:"number"}})//age为number类型,还有string等

    db.user.find({age:{$exists:true}})//存在age,false表示不存在

    5)匹配运算

    db.user.find({age:{$regex:/3/}})//正则匹配

    db.user.find({$where:function(){return this.age==23;}})//类似js对象

    6)原子操作

    db.user.update({age:23},{$inc:{age:3}});//存在则加3,不存在那么添加为3的初始值,mul相乘,min最小值大于指定的数否则变成最小值,max类似,set修改属性,unset删除属性

    db.user.find({havior:{$elemMatch:{a:1}}})//数组中包含元素的文档

    db.user.update({age:5},{$currentDate:{datetime:{$type:'timestamp'}}});//插入当前时间戳

    db.user.update({age:23},{$setOnInsert:{age:3}},{upsert:true})//{upsert:true}需添加,假如查询条件存在,那么查询条件和setoninsert的数据作为一条数据插入,否则什么也不做,主要与set一起搭配使用

    db.user.update({age1:23},{$rename:{"age1":"age2"}})//rename 重命名,只会更改名字

    db.user.update({age1:23},{$unset:{age2:5}})//删除属性age2,与属性age2的值无关

    7)对数组操作

    db.user.update({age:4},{$addToSet:{havior:5}})//havior中存在数组不存在该值,就添加进入,不存在数组就创建,存在数组存在该值,不变

    db.user.update({age:4},{$pop:{havior:1}});//1表示删除最后一个元素,-1表示第一个元素,push压栈同pop

    db.user.update({age:4},{$addToSet:{havior:{$each:[5,6]}}});//each批量插入,slice截取,整数宝石从头开始的元素个数,负数表示从尾部开始的个数

    db.user.insert({age5:23,name:"lili",havior:[1,2,3,4,5,6]})

    db.user.update({age3:23},{$pull:{havior:1}})//移除数组中的一条指定的内容

    db.user.update({age3:23},{$pull:{havior:{$in:[1,2]}}})//移除包含在内的一条内容之一

    db.user.update({age5:23},{$push:{havior:{$each:[6,3,10],$slice:3}}})//数组each插入后,截取前3个,slice负数表示后几个.slice需要与ecah一起使用,sort也要与each一起使用,sort是对数组中的文档的元素进行排序,排序后可以截取

    db.user.insert({age6:23,name:"lili",havior:[{name:1},{name:2},{name:3}]})

    db.user.update({age6:23},{$push:{havior:{$each:[{name:6},{name:3},{name:10}],$slice:-3,$sort:{name:-1}}}})//会按集合的元素先排序后截取

    8)聚合//聚合不会影响原集合,类似java8的stream流

    db.user.aggregate([{$group : {_id : "$name", num_tutorial : {$sum : 1}}}])//按name分组统计从1开始累加,,分组的_id 不能变,num_tutorial可以任意取名,$name表示属性name

    db.user.aggregate([{$group : {_id : "$name", num_tutorial : {$max : "$age"}}}])//按name分组统计最大值;avg,min,first//第一个一般与sort一起使用,last//最后一个,类似

    db.user.aggregate([{$group : {_id: "$name", age : {$push: "$name"}}}])// push类似数组,先按要求分组然后加入数组,假如不是数组那么会替换,不改变原集合

    db.user.aggregate( [{ $match : {age : { $gt : 20, $lte : 30 } } },{ $group: { _id: "$name", count: { $sum: 1 } } }] );//match匹配的元素

    db.user.aggregate([{$project:{age6:1,name:1}}]);//project只输出age6与name属性,都没有就只输出id

    备注:id属于自动随机生成的

    ObjectId("5b8292562ee15cfdbc1f9228")生成规则

    4byte: 5b829256  =>   1468660568    时间

    3byte:   2ee15c    =>   机器的唯一标识码

    2byte:  fdbc       =>   进程ID

    3byte:  1f9228     =>   随机数

     待续。。。。

  • 相关阅读:
    iozone的三大神器之一fileop
    nginx反向代理配置相对路径
    自建yum源解决Ceph搭建过程中从官网取包慢的问题
    SourceInsight 4重启之后文件变只读无法编辑
    Android应用启动时Activity被创建两次
    mfscli的使用方法(解决mfscgi响应慢的问题)
    漫谈moosefs中cgi各项的意义
    Linux stress CPU的测试方法
    磁盘测试工具FIO工具安装和使用方法
    iperf测试工具
  • 原文地址:https://www.cnblogs.com/gg128/p/9539691.html
Copyright © 2011-2022 走看看