本系列基于对的学习笔记
查询
条件操作符
大于小于条件操作符
如第一章所说,有$gt,$lt,$gte,$lte四种,分别表示大于,小于,大于等于,小于等于
type条件操作符
语法
$type:[key]
可选key及其含义
key | 含义(括号中代表也可使用此字符查询) |
---|---|
1 | 双精度型(double) |
2 | 字符串(string) |
3 | 对象(object) |
4 | 数组(array) |
5 | 二进制数据(binary data) |
7 | 对象 ID(object id) |
8 | 布尔类型(boolean) |
9 | 日期(date) |
10 | 空(null) |
11 | 正则表达式(regular expression) |
13 | JS 代码(javascript) |
14 | 符号(symbol) |
15 | 有作用域的 JS 代码(javaScript with scope) |
16 | 32 位整型数(32-bit integer) |
17 | 时间戳(timestamp) |
18 | 64 位整型数(64-bit integer) |
-1 | 最小值(min key) |
127 | 最大值(max key) |
limit与skip
示例
> db.shiyanlou.find().limit(1).skip(1)
sort
语法
db.COLLECTION_NAME.find().sort({KEY:1|-1})
升序:1 降序:-1
示例
> db.shiyanlou.find().sort({"time":1})
索引
添加索引
介绍
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中, 索引是对数据库集合中一个文档或多个文档的值进行排序的一种结构。
语法
db.COLLECTION_NAME.ensureIndex({KEY:1|-1})
示例
> db.shiyanlou.ensureIndex({"name":1})
可选参数
参数 | 类型 | 描述 |
---|---|---|
background | Boolean | 建立索引要不要阻塞其他数据库操作,默认为 false |
unique | Boolean | 建立的索引是否唯一,默认 false |
name | string | 索引的名称,若未指定,系统自动生成 |
dropDups | Boolean | 建立唯一索引时,是否删除重复记录,默认 flase |
sparse | Boolean | 对文档不存在的字段数据不启用索引,默认 false |
expireAfterSeconds | integer | 设置集合的生存时间,单位为秒 |
v | index version | 索引的版本号 |
weights | document | 索引权重值,范围为 1 到 99999 |
default-language | string | 默认为英语 |
language_override | string | 默认值为 language |
查看索引
获取索引
db.collection_name.getIndexes() # 获取collection_name集合的所有索引
db.collection_name.getIndexSpecs()
查看那些key有索引
db.dev.getIndexKeys()
查看集合中索引大小
语法
db.collection_name.totalIndexSize([ detail ] (可选参数))
示例
db.collection_name.totalIndexSize() # 查看总的索引大小,传入0或不传或传入false
db.collection_name.totalIndexSize(1) # 分别查看所有索引大小,传入除0或false的任意数据
修改索引
mongodb没有专门的修改索引函数,可以先删除再新增
删除索引
语法
db.collection_name.dropIndex(“索引名称”)
删除全部索引
语法
db.collection_name.dropIndexes()
重建索引
使用场景
重建索引可以:
(1)减少索引的存储空间,减少索引碎片
(2)优化索引的查询效率
(3)一般在数据大量变化后,会使用重建索引来提升性能。
重建索引是删除原索引重新创建的过程,不建议反复使用
语法
db.collection_name.reIndex()
聚合
语法
db.COLLECTION_NAME.aggregate({
$match:{x:1},
{limit:NUM},
$group:{_id:$age}
})
参数
参数 | 含义 |
---|---|
$match | 查询,跟 find 一样 |
$limit | 限制显示结果数量 |
$skip | 忽略结果数量 |
$sort | 排序 |
$group | 按照给定表达式组合结果 |
$unwind | 将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值 |
$geoNear | 输出接近某一地理位置的有序文档 |
聚合表达式
|名称| 描述| |$sum| 计算总和| |$avg| 计算平均值| |$min和$max| 计算最小值和最大值| |$push| 在结果文档中插入值到一个数组| |$addToSet| 在结果文档中插入值到一个数组,但不创建副本| |$first| 根据资源文档的排序获取第一个文档数据| |$last |根据资源文档的排序获取最后一个文档数据|
管道
MongoDB 的聚合管道将 MongoDB 文档在一个管道处理完毕后将结果传递给下一个管道处理。 管道操作是可以重复的。
示例
db.shiyanlou.aggregate([{$match:{user_id:{$gt:0,$lte:2}}},{$group:{_id:"user",count:{$sum:1}}}])
{"_id":"user","count":2}
/**
- Paste one or more documents here */
mongo “mongodb://{username}:{password}@{hostname}:{port}/{dbname}?authSource=admin” mongo “mongodb://hexiaojiao:jiao@127.0.0.1:27017/{dbname}?authSource=admin” mongo “mongodb://hexiaojiao:jiao@127.0.0.1:27017/test?authSource=admin”
mongodb://root:handhand@1.15.176.24:27017/admin?authSource=admin
uint32_field_type 22 枚举 11 字符串 32 日期 12 枚举(关联线索归属人?) 31 具体时间 21 字符串(联系人归属人?) 13 照片
optional uint32 uint32_field_type = 3; // 字段类型,仅限查询时使用, 1-文本列表,11-短文本,12-枚举值(多选),13-图片,21-整数,22-枚举值(单选), 31-日期时间,32-日期,41-实数,51-长文本
|data.records |array |数据记录 |
education 学历
关注状态无法对应 关注公众号无法对应 leadsOwner 12 关联线索归属人无法对应
高中 20
男20 初中 40 大学 40
高中 30
女80 初中 50 大学 20
bson.D{ {"$project", bson.D{ {"_id", 1}, {“err_down_notice”, 1}, {“update_time”, 1}, }}, }, bson.D{ {"$match", bson.D{{“task_id”, bson.D{ {"$in", recordsIds}, }}, {“report_status”, ReportStatusErr}}}, }, bson.D{ {"$group", bson.D{ {"_id", “$task_id”}, {“err_down_notice”, bson.D{ {"$sum", 1}, }}, }}, }, bson.D{ {"$sort", bson.D{{“update_time”, -1}}}, }, }
db.tbl_mock_user_data.aggregate([ { “$match”: { “task_id”: { “$in”: null }}}, { “$group”: { “_id”: { “task_id”: “$task_id” }, “count”: { “$sum”: 1 } }} ])