说些基本的 Mongo 概念:
Read 基本上就是 query 拿数据,选定 collection 然后再里面定位 documents
db.collection.find()
db.users.find( { age: { $gt: 18 } }, { name: 1, address: 1 } ).limit(5) |
先说 find 返回的是个 cursor , 这个其实就是返回结果的集合,可以迭代的
projection 就是在条件上投影出想要的字段 1 代表显示, 0 代表排除。 显示和排除是不能一起用的,特例是你排除的是 ‘_id’
否则:
- 要么你把显示的都列出来都是 1
- 要么你把排除的列出来都是 0,然后显示剩下的
这里面 $gt
是选择器(selector) “大于”,还有其 eq exists in 等等
https://docs.mongodb.org/manual/reference/operator/query/#query-selectors
limit 是对 cursor 的修饰,也就是对 find 的结果的再次修饰
- limits //选出前几个
- skips //去掉前几个
- sort //按拿个字段排序
复杂条件查询,可能还会用到 aggregation pipeline;
其实就是 pipeline, 但支持很多操作,匹配,分组,随机,还可以对特定字段数据进行处理。 这个好牛
查询优化:
- 索引
- Query Selectivity 也就是条件要正向的,nin 这种和不用索引没啥区别了