# mongoDB ### 创建新用户 ```js db.createUser( { user: "yingbo", pwd: "623910ert", roles: [ { role: "dbAdmin", db: "yingbo" },{ role: 'readWrite', db: "yingbo"} ] } ) db.createUser( { user: "admin", pwd: "rqRrjTDaq9", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) ``` ### log目录 `/var/log/mongodb/mongod.log` ### db目录 `/var/lib/mongo` ### 配置文件 `/etc/mongod.conf` ### 端口 12236 ### 启动/重启/停止 `sudo service mongod start/restart/stop` ### 开启用户认证 conf 文件加 ``` security: authorization: enabled ``` ### 登录 ``` c //方法一 mongo --port 12236 -u "admin" -p "rqRrjTDaq9" --authenticationDatabase "admin" //方法二 db.auth("yingbo", "623910ert") db.auth("admin", "rqRrjTDaq9") ``` ### 显示所有数据库 `show dbs` ### 删库 ``` use db.dropDatabase() ``` ### 显示所有集合 `show tables` 或者 `show collections` ### 创建集合 ```js //正常情况下直接插入数据就可以自动新建一个集合 //创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。 db.createCollection("", { capped : true, autoIndexId : true, size : 6142800, max : 10000 } ) //单纯的新建一个集合 db.createCollection("") ``` ### 删除集合 `db..drop()` ### 增 `db..insert()` ### 删 `db..remove({key:value})` find里边可以为{}删除全部 ### 改 ``` db..update( , , { upsert: , multi: , writeConcern: } ) /* query : update的查询条件,类似sql update查询内where后面的。 update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的 upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。 multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。 writeConcern :可选,抛出异常的级别。 */ ``` ### 查 `db..find({key:value})` find里边可以没有参数 ``` //格式化显示 db.col.find().pretty() //条件语句 db.col.find({likes : {$lt :200, $gt : 100}}).pretty() //限制 100.find().limit().skip()` number1 : 本次查询最多显示条数 number2 : 本次查询跳过的条数 --- ## sort() 方法 `db..find().sort({:})` key : 需要进行排序的键名 number : 其中 1 为升序排列,而 -1 是用于降序排列 --- ## createIndex() 方法 `db.values.createIndex({: , : }, {background: true})` key : 需要进行排序的键名 number : 其中 1 为升序排列,而 -1 是用于降序排列 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。 --- ## aggregate() 方法 ``` db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "runoob.com", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1 } ``` $sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) $avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) $min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) $max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) $push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) $addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) $first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) $last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) ## 管道 $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。 ``` 结果中就只还有_id,tilte和author三个字段 db.article.aggregate( { $project : { title : 1 , author : 1 , }} ); 连id一起删除 db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }}); ``` $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。 ``` db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] ); ``` $limit:用来限制MongoDB聚合管道返回的文档数。 $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。 ``` db.article.aggregate( { $skip : 5 }); ``` $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。 $group:将集合中的文档分组,可用于统计结果。 $sort:将输入文档排序后输出。 $geoNear:输出接近某一地理位置的有序文档。 --- ## MongoDB 复制(副本集) 等树莓派装完再看 ## MongoDB 分片 等树莓派装完再看 ## 备份 `mongodump -h dbhost -d dbname -o dbdirectory` -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017 -d: 需要备份的数据库实例,例如:test -o: 备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。 ## 恢复 `mongorestore -h <:port> -d dbname ` ``` --host <:port>, -h <:port>: MongoDB所在服务器地址,默认为: localhost:27017 --db , -d : 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2 --drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦! : mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。 你不能同时指定 和 --dir 选项,--dir也可以设置备份目录。 --dir: 指定备份的目录 你不能同时指定 和 --dir 选项。 ```