基本查询
基本查询的通用方式 : db.表名.find({},{}).功能
第一个{} 为条件查询
第二个{} 为返回的列 {字段名:1}
功能 : sort(字段:1) | skip(num) | limit(num) | count()
条件查询
第一个花括号
查找全部
db.users.find()
精准查找
db.users.find({"name":"zhangsan"})
精准查找
db.users.find({"name":"zhangsan"})
>,>=,<,<= 查找
大于 : db.users.find({"name":{$gt:"q"}})
大于等于 : db.users.find({"name":{$gte:"q"}})
小于 : db.users.find({"name":{$lt:"q"}})
小于等于 : db.users.find({"name":{$lte:"q"}})
多个条件并且关系 查找
db.users.find({"name":"zhangsan","age":20}) //不同key
db.users.find({"age":{$gte:25,$lte:28}}) //相同key
多个条件或许关系 查找
db.users.find({ $or:[{age:24},{age:28}] })
模糊查询
模糊查询 : db.article.find({"title":/女装/})
以什么开头 : db.users.find({title:/^女装/})
第二个花括号
查询指定列
单列 : db.users.find({},{name:1})
多列 : db.users.find({age:{$gte:25}},{name:1,age:1})
功能
排序
正序 : db.users.find({},{}).sort({age:1})
倒序 : db.users.find({},{}).sort({age:-1})
限制
查询前五条数据 : db.users.find({},{}).limit(5)
跳过两条,查询后面三条数据 : db.users.find({}).skip(2).limit(3)
分页方法 : 分页 skip-1 * limit
统计
db.users.find({ age:{$gte:24} }).count()
高级查询 aggregate
Aggregation 管道操作符与表达式
| 管道操作符 | Description |
|---|---|
| $project | 查询字段进行筛选 |
| $match | 条件匹配。只满足条件的文档才能进入下一阶段 |
| $limit | 限制结果的数量 |
| $skip | 跳过文档的数量 |
| $sort | 条件排序 |
| $group | 条件进行分组和统计 |
| $lookup | $lookup 操作符 用以引入其它集合的数据(表关联查询) |
SQL 和 和 NOSQL 对比
| SQL | NOSQL |
|---|---|
| SELECT | $project |
| WHERE | $match |
| GROUP BY | $group |
| HAVING | $project |
| ORDER BY | $sort |
| LIMIT | $limit |
| SUM() | $sum |
| COUNT() | $sum |
| join | $lookup |
每个管道表达式 看上面官方图,$group中的求和表达式。
| 常用表达式操作符 | Description |
|---|---|
| $addToSet | 将文档指定字段的值去重 |
| $max | 文档指定字段的最大值 |
| $min BY | 文档指定字段的最小值 |
| $sum | 文档指定字段求和 |
| $multiply | 文档指定两个字段求乘 |
| $avg BY | 文档指定字段求平均 |
| $gt | 大于给定值 |
| $lt() | 小于给定值 |
| $eq() | 等于给定值 |
聚合管道格式
db.order.aggregate([
{
$project:{ trade_no:1, all_price:1 }
},
{
$match:{"all_price":{$gte:90}}
},
{
$limit:1
},
{
$skip:1
},
{
$sort:{"all_price":-1}
},
{
$group :{_id:"$order_id",totalNum:{$sum:"$num"},totalPrice: { $sum: { $multiply: [ "$price", "$num" ] } } }
},
{
$lookup:
{
from: "order_item",
localField: "order_id",
foreignField: "order_id",
as: "items"
}
}
])