mongoDB学习记录(一)
1.安装
docker-compose.yml
version: '3'
services:
mongodb:
image: mongo:latest
restart: always
container_name: mongodb
volumes:
- /opt/mongodb/data/configdb:/data/configdb
- /opt/mongodb/data/db:/data/db
- /opt/mongodb/log:/var/log/mongodb
ports:
- 27018:27017
environment:
TZ=Asia/Shanghai
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: admin
2.进入mongo容器
docker exec -it mongodb mongo admin
3.权限校验
进入admin库
use admin db.auth("admin","admin")
4.新建test数据库
use test
5.新建test数据库的用户
db.createUser({user:"test",pwd:"test123",roles:[{role:'dbAdmin',db:'test'}]})
6.创建用户的角色说明
权限(role) | 作用 |
---|---|
read | 允许用户读取指定数据库。 |
readWrite | 允许用户读写指定数据库。 |
dbAdmin | 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile。 |
userAdmin | 允许用户向system.users集合写入,可以在指定数据库里创建、删除和管理用户。 |
clusterAdmin | 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 |
readAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读权限。 |
readWriteAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的读写权限。 |
userAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。 |
dbAdminAnyDatabase | 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 |
root | 只在admin数据库中可用。超级账号,超级权限。 |
7.与关系型数据库的对比
RDBMS | MongoDB |
---|---|
Table(表) | Collection(集合) |
Column(栏) | Key(键) |
Value(值) | Value(值) |
Records / Rows(记录/列) | Document / Object(文档/对象) |
8.MongoDB中常用的几种数据类型
数据类型 | 描述 |
---|---|
string(字符串) | 可以是一个空字符串或者字符组合。 |
integer(整型) | 整数。 |
boolean(布尔型) | 逻辑值 True 或者 False。 |
double | 双精度浮点型 |
null | 不是0,也不是空。 |
array | 数组:一系列值 |
object | 对象型,程序中被使用的实体。可以是一个值,变量,函数,或者数据结构。 |
timestamp | timestamp存储为64为的值,只运行一个mongod时可以确保是唯一的。前32位保存的是UTC时间,单位是秒,后32为是在这一秒内的计数值,从0开始,每新建一个MongoTimestamp对象就加一。 |
Internationalized Strings | UTF-8 字符串。 |
Object IDs | 在mongodb中的文档需要使用唯一的关键字_id来标识他们。几乎每一个mongodb文档都使用_id字段作为第一个属性(在系统集合和定容量集合(capped collection)中有一些例外)。_id值可以是任何类型,最常见的做法是使用ObjectId类型。 |
9.插入文档(写入数据)
集合创建:如果该集合当前不存在,则插入操作将创建该集合。
在MongoDB中,存储在集合中的每个文档都需要一个唯一的**_id字段作为主键。如果插入的文档省略_id字段,则MongoDB驱动程序会自动为_id字段生成ObjectId**。
1.单条数据写入
db.inventory.insertOne({ item: "canvas", qty: 100, tags: ["cotton"], size: { h: 28, w: 35.5, uom: "cm" }})
2.多条数据写入
db.inventory.insertMany([ { item: "journal", qty: 25, tags: ["blank", "red"], size: { h: 14, w: 21, uom: "cm" } }, { item: "mat", qty: 85, tags: ["gray"], size: { h: 27.9, w: 35.5, uom: "cm" } }, { item: "mousepad", qty: 25, tags: ["gel", "blue"], size: { h: 19, w: 22.85, uom: "cm" } } ])
10. 文档查询
1.获取所有
选择集合中的所有文档
要选择集合中的所有文档,请将空文档作为查询过滤器参数传递给find方法。 查询过滤器参数确定选择条件:
db.inventory.find( {} )
此操作对应于以下SQL语句:
SELECT * FROM inventory
2.查询条件=
db.inventory.find( { status: "D" } )
此操作对应于以下SQL语句:
SELECT * FROM inventory WHERE status = "D"
3.查询条件IN
db.inventory.find( { status: "A", qty: { $lt: 30 } } )
此操作对应于以下SQL语句:
SELECT * FROM inventory WHERE status = "A" AND qty < 30
4.查询条件OR
db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } )
此操作对应于以下SQL语句:
SELECT * FROM inventory WHERE status = "A" OR qty < 30
5.查询条件LIKE
db.inventory.find( { status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] } )
此操作对应于以下SQL语句:
SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%")