前言
参考:
https://www.runoob.com/mongodb/mongodb-tutorial.html
https://www.yuque.com/boogipop/ot88z5/zcq88ma6bgw6dmuw#vBsln
官方文档:https://www.mongodb.com/zh-cn/docs/manual/reference/
安装
数据库安装:https://www.mongodb.com/try/download/community
shell工具安装:https://www.mongodb.com/try/download/shell
概念
SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
连接
标准 URI 连接语法:
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
语法
此事在Nosql注入中亦有记载…
数据库操作
创建数据库:use dbname
,假如存在就是切换到目标,不存在就新建
查看所有数据库:show dbs
删除数据库:切换到目标数据库,然后db.dropDatabase()
即可
集合操作
创建集合:db.createCollection()
,db代表当前选中数据库
创建集合的时候可以初始化一些数据:db.createCollection("mycol", { capped : true, autoIndexId : true, size : 6142800, max : 10000 })
删除集合:db.<collectioname>.drop
列出所有集合:show collections/show tables
增删查改
增加数据:
db.<collectionname>.insertOne({key:value,key:value})
db.<collectionname>.save({key:value,key:value})
插入多条数据:
db.users.insertMany([
{ name: "Alice", age: 25, email: "alice@example.com" },
{ name: "Bob", age: 30, email: "bob@example.com" },
{ name: "Charlie", age: 35, email: "charlie@example.com" }
])
删除语句:
单条删除:db.users.deleteOne({ name: "Alice" })
多条删除:db.users.deleteMany({ age: { $lt: 30 } })
修改数据:
单条:db.users.updateOne({ name: "Alice" }, { $set: { age: 26 } })
多条:db.users.updateMany({ age: { $lt: 30 } }, { $set: { status: "active" } })
例如,要替换users集合中name字段为Bob的第一个文档,可以使用:(后面是修改的数据)
db.users.replaceOne({ name: "Bob" }, { name: "Bob", age: 31, email: "bob@example.com" })
查询语句:
db.<collectionname>.find() # 查询所有
db.users.find({ name: "Alice" }, { name: 1, age: 1 }) # 条件查询往里面加语句
db.users.findOne({ name: "Alice" }) # 限制单条条件查询,只返回一个数据
db.users.findOne({ name: "Alice" }, { name: 1, age: 1 }) # 使用name和age字段指定了一个投影,该投影将仅返回具有name和age字段的文档
条件操作符
查询和投影操作符
比较查询
$eq
$gt
$gte
$in
$lt
$lte
$ne
$nin
逻辑查询
$and
$not
$nor
$or
元素查询
$exists
$type
评估查询
$expr
$jsonSchema
$mod
$regex
$text
$where
数组查询
$all
$elemMatch
$size
按位查询
$bitsAllClear
$bitsAllet
$bitsAnyClear
$bitsAnySet
投影操作
$
$elemMatch
$slice
其他
$comment
$rand
$natural
更新操作符
字段更新
$currentDate
$inc
$min
$max
$mul
$rename
$set
$setOnInsert
$unset
数组更新
$
$[]
$[<identifier>]
$addToSet
$pop
$pull
$push
$pullAll
$each
$position
$slice
$sort
按位更新
$bit
聚合操作符
这个太多了,直接看文档吧:https://www.mongodb.com/zh-cn/docs/manual/reference/operator/aggregation
字符串表达式
名称 | 说明 |
---|---|
$concat |
连接任意数量的字符串。 |
$dateFromString |
将日期/时间字符串转换为日期对象。 |
$dateToString |
以格式化字符串的形式返回日期。 |
$indexOfBytes |
搜索字符串中出现的子字符串,并返回首次出现的 UTF-8 字节索引。如果未找到该子字符串,则返回 -1 。 |
$indexOfCP |
在字符串中搜索子字符串的出现位置,并返回第一次出现时的 UTF-8 码位索引。如果未找到子字符串,则返回 -1 |
$ltrim |
删除字符串开头和结尾的空白或指定字符。版本 4.0 中的新增功能. |
$regexFind |
将正则表达式应用于字符串,并返回第一个匹配子字符串的信息。 |
$regexFindAll |
将正则表达式 (regex) 应用于字符串,并返回有关所有匹配子字符串的信息。 |
$regexMatch |
将正则表达式 (regex) 应用于字符串并返回一个布尔值,它可表示是否已找到匹配项。 |
$replaceOne |
替换给定输入中匹配字符串的第一个实例。 |
$replaceAll |
替换给定输入中匹配字符串的所有实例。 |
$rtrim |
删除字符串结尾的空白或指定字符。 |
$split |
根据分隔符将字符串拆分为子字符串。返回子字符串数组。如果在字符串中找不到分隔符,则返回包含原始字符串的数组。 |
$strLenBytes |
返回字符串中 UTF-8 编码的字节数。 |
$strLenCP |
返回 UTF-8 代码点数 |
$strcasecmp |
执行不区分大小写的字符串比较并返回:如果两个字符串相等,则返回 0 ;如果第一个字符串大于第二个字符串,则返回 1 ;如果第一个字符串小于第二个字符串,则返回 -1 。 |
$substr |
已弃用。使用$substrBytes 或 $substrCP |
$substrBytes |
返回字符串的子串。从字符串中指定的 UTF-8 字节索引(从零开始)处的字符开始,持续指定的字节数。 |
$substrCP |
返回字符串的子字符串。从指定的 UTF-8 代码点 (CP) |
$toLower |
将字符串转换为小写。接受单个参数表达式。 |
$toString |
将值转换为字符串。 |
$trim |
删除字符串开头和结尾的空白或指定字符。 |
$toUpper |
将字符串转换为大写。接受单个参数表达式。 |