什么是MongoDB?
存储文档的非关系型数据库
使用 Docker容器运行 MongoDB
1 2 3 4 5 6 7 8 9 10 11 12 |
docker pull mongo:4 # 拉取镜像 docker images # 查看 docker run --name mymongo -v /tmp/mymongo:/data/db -d mongo:4 # 运行 (-d 后台运行, -v 挂载数据目录) docker ps # 查看容器状态 docker logs mymongo # 查看日志 # 运行 Mongo Express docker pull mongo-express # 拉取镜像 docker run --link mymongo:mongo -p 8081:8081 mongo-express # 运行 # 运行 Mongo Shell docker exec -it mymongo mongo |
文档主键 _id,默认的 ObjectId 包含12位,前4位表示时间,精确到秒
集合方法
- db.collection.aggregate()
- db.collection.bulkWrite()
- db.collection.copyTo()
- db.collection.count()
- db.collection.countDocuments()
- db.collection.estimatedDocumentCount()
- db.collection.createIndex()
- db.collection.createIndexes()
- db.collection.dataSize()
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.distinct()
- db.collection.drop()
- db.collection.dropIndex()
- db.collection.dropIndexes()
- db.collection.ensureIndex()
- db.collection.explain()
- db.collection.find()
- db.collection.findAndModify()
- db.collection.findOne()
- db.collection.findOneAndDelete()
- db.collection.findOneAndReplace()
- db.collection.findOneAndUpdate()
- db.collection.getIndexes()
- db.collection.getShardDistribution()
- db.collection.getShardVersion()
- db.collection.insert()
- db.collection.insertOne()
- db.collection.insertMany()
- db.collection.isCapped()
- db.collection.latencyStats()
- db.collection.mapReduce()
- db.collection.reIndex()
- db.collection.remove()
- db.collection.renameCollection()
- db.collection.replaceOne()
- db.collection.save()
- db.collection.stats()
- db.collection.storageSize()
- db.collection.totalIndexSize()
- db.collection.totalSize()
- db.collection.update()
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.watch()
- db.collection.validate()
运算符
查询和投影运算符
比较查询运算符
名称 | 描述 |
---|---|
$eq |
匹配与指定值相等的值。 |
$gt |
匹配大于指定值的值 |
$gte |
匹配大于等于指定值的值。 |
$in |
仅匹配指定数组中的值。 |
$lt |
匹配小于指定值的值。 |
$lte |
匹配小于等于指定值的值。 |
$ne |
匹配所有不等于指定值的值。 |
$nin |
匹配不在指定数组中的值。 |
逻辑查询运算符
名称 | 描述 |
---|---|
$and |
使用逻辑与 AND 拼接查询语句,返回匹配两条语句的所有文档。 |
$not |
查询表达式的反向效果,返回不匹配查询表达式的文档。 |
$nor |
使用逻辑非 NOR 连接查询语句,返回所有无法匹配两条语句的文档。 |
$or |
使用逻辑或 OR 连接查询语句,返回所有匹配任意一条语句条件的文档。 |
元素查询运算符
名称 | 描述 |
---|---|
$exists |
匹配有指定字段的文档。 |
$type |
选择字段为指定类型的文档。 |
运行查询运算符
名称 | 描述 |
---|---|
$expr |
允许在查询语句中使用聚合表达式。 |
$jsonSchema |
按照给定的JSON模式验证文档。 |
$mod |
对字段值执行取模运算并通过指定结果选取文档。 |
$regex |
选择值匹配指定正则表达式的文档。 |
$text |
执行文本搜索。 |
$where |
匹配满足某JavaScript表达式的文档。 |
数组查询运算符
名称 | 描述 |
---|---|
$all |
匹配包含查询中指定的所有元素的数组。 |
$elemMatch |
选取元素匹配数组中字段匹配指定$elemMatch 条件的文档。 |
$size |
选项数组字段为指定大小的文档。 |
按位查询运算符
名称 | 描述 |
---|---|
$bitsAllClear |
匹配数值或二进制值,其中一组比特位置的值都为 0 。 |
$bitsAllSet |
匹配数值或二进制值,其中一组比特位置的值都为 1 。 |
$bitsAnyClear |
匹配数值或二进制值,其中一组比特位置中的任意位值为 0 。 |
$bitsAnySet |
匹配数值或二进制值,其中一组比特位置中的任意位值为 1 。 |
其它
$comment
$(projection)
$elemMatch (projection)
$meta
$slice (projection)
更新运算符
字段更新运算符
名称 | 描述 |
---|---|
$currentDate |
设置字段值为当前日期,为Date或Timestamp。 |
$inc |
使用给定值对字段值进行累加。 |
$min |
仅在指定值小于已有字段值时更新字段。 |
$max |
仅在指定值大于已有字段值时更新字段。 |
$mul |
通过指定值乘以字段值。 |
$rename |
重命名字段。 |
$set |
在文档中设置字段值。 |
$setOnInsert |
若更新导致文档插入的话设置字段值。对修改已有文档的更新运算不产生影响。 |
$unset |
从文档中删除指定字段。 |
数组更新运算符
名称 | 描述 |
---|---|
$ |
Acts as a placeholder to update the first element that matches the query condition. |
$[] |
Acts as a placeholder to update all elements in an array for the documents that match the query condition. |
$[<identifier>] |
Acts as a placeholder to update all elements that match the arrayFilters condition for the documents that match the query condition. |
$addToSet |
Adds elements to an array only if they do not already exist in the set. |
$pop |
Removes the first or last item of an array. |
$pull |
Removes all array elements that match a specified query. |
$push |
Adds an item to an array. |
$pullAll |
Removes all matching values from an array. |
按位更新运算符
名称 | 描述 |
---|---|
$bit |
对整型值执行按位与 AND ,或 OR 及非 XOR 更新. |