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.与关系型数据库的对比

RDBMSMongoDB
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%")
原文地址:https://www.cnblogs.com/ningyouyou/p/15528148.html