2021-11-14 14:32:08 +08:00

218 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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"
}
)
```