--- title: "Mongodb 笔记" date: 2019-10-30T10:56:11+08:00 lastmod: 2019-10-30T10:56:11+08:00 keywords: [] tags: ["mongodb"] categories: ["database"] --- ## 数据迁移 ### 导出集合数据到 json 或 csv 文件 - 命令 ``` mongoexport -d dbname -c collectionname -o file --type json/csv -f "field1,field2,...,fieldN" ``` - 参数 - -d 数据库名 - -c 集合名 - -o 输出文件名 - --type 输出格式,默认 json - -f 输出字段,如果导出 csv,需指定字段名 ### 导入数据到集合 - 命令 ``` mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f "field1,field2,...,fieldN" ``` - 参数 - -d 数据库名 - -c 集合名 - --type 导入格式,默认 json - -f 导入的字段名 - --headerline 导入csv时,使用第一行的标题作为导入字段 - --file 导入的文件 ### 备份数据库 - 命令 ``` mongodump -h dbhost -d dbname -o backup_dir ``` - 参数 - -h ip[:port] - -d 数据库名 - -o 备份数据存放目录,需提前建立 ### 恢复数据库 - 命令 ``` mongorestore -h dbhost -d dbname --dir backup_dir ``` - 参数 -h ip[:port] -d 数据库名 --dir 备份数据存放目录 --drop 恢复前,先删除当前数据 ## 操作数据库 - 默认数据库 test - 创建 use dbname - 查看当前选择的数据库 db - 查看数据库列表 show dbs,不显示空数据库 - 删除数据库 use dbname; db.dropDatabase() ## 操作集合 ### 创建 ``` db.createCollection("集合名", {capped:false, autoIndexId:false, size:最大字节, max:文档最多数量}) ## 或者在插入文档时自动创建 db.集合名.inert({}) ``` ### 删除 ``` db.集合名.drop() ``` ## 操作文档 ### insert - 插入一个文档 ``` db.集合名.insert({}) # 或者 db.集合名.insertOne({}) ``` - 插入多个文档 ``` db.集合名.insert([{},{},{},...,{}]) # 或者 db.集合名.insertMany([{},{},{},...,{}]) ``` ### find - 查询匹配的文档 ``` db.集合名.find({}).pretty() ``` - 查询,只返回一个文档 ``` db.集合名.findOne({}) ``` - 相等 {"key":"value"} - 小于 {"key":{$lt:"value"}} - 小于等于 {"key":{$lte:"value"}} - 大于 {"key":{$gt:"value"}} - 大于等于 {"key":{$gte:"value"}} - 不等于 {"key":{$ne:"value"}} - and {$and:[{},{}]} - or {$or:[{},{}]} - 投影 ``` db.集合名.find({},{"key1":1,"key2":0 ...}) ``` - 限制返回文档数量 ``` db.集合名.find({}).limit(N) ``` - 跳过返回文档数量 ``` db.集合名.find({}).limit(N).skip(N) ``` - 排序,1升序,-1降序 ``` db.集合名.find({}).sort({"key":1}) ``` ### update - 更新一个文档 ``` db.集合名.update({},{$set:{}}) ``` - 更新多个文档 ``` db.集合名.update({},{$set:{},{multi:true}}) ``` ### save ``` db.集合名.save({,...}) ``` ### remove - 删除多条记录 ``` db.集合名.remove({}) ``` - 删除一条记录 ``` db.集合名.remove({},1) ``` - 删除集合中的所有文档,相当于 truncate ``` db.集合名.remove() ``` ### 索引 - 创建索引,1升序,-1降序 ``` db.集合名.createIndex({"key1":1,"key2":-1}) ``` ### 聚合 ``` db.集合名.aggregate([{}]) ``` ## 用户 ### 创建用户 - 管理员权限 ``` use admin db.createUser( { user: "username", pwd: "password", roles: [{role: "root", db: "admin"}] } ) ``` - 测试库读写权限 ``` use testdb db.createUser( { user: "username", pwd: "password", roles: ["readWrite"] } ) ``` ### 验证身份 ``` db.auth("username", "password") ``` ### 列出所有用户 ``` db.getUsers() ``` ### 删除数据库用户 ``` use testdb db.dropUser("username") ``` ### 更改用户密码 ``` db.updateUser( "username", { pwd: "new_password" } ) ```