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     =>   随机数

 待续。。。。

原文地址:https://www.cnblogs.com/gg128/p/9539691.html