基本查询
基本查询的通用方式 : 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"
}
}
])
复制代码