1.与查询 and
db.user.find({age:0,black:false})
2.或查询 or
db.user.find({$or:[{age:0},{age:12}]})
3.比较运算符
| $eq | 等于 |
| $ne | 不等于 |
| $gt | 大于 |
| $gte | 大于等于 |
| $lt | 小于 |
| $lte | 小于等于 |
| $in | 包含 |
| $nin | 不包含 |
db.user.find({age:{"$gt":10})
4.模糊查询
db.user.find({name: { $regex: "张三", $options: "i" }})
$regex 使用的正则查询,i 忽略大小写
5.排序,分页
db.user.find().sort({ createTime: -1 }).skip(20).limit(10)
正序是 1,倒序是-1
6.去重
db,user.distinct("city")
7.聚合(aggregate)
7.1运算符
| $sum | 求和 |
| $avg | 求平均值 |
| $min | 求最小值 |
| $max | 求最大值 |
| $first | 组中第一个文档字段值 |
| $last | 组中最后一个文档字段值 |
| $push | 把字段值放入数组 |
| $addToSet | 把字段值放入数组并去重 |
7.2分组查询
$match 过滤
{ $match: { age:{$gt:10} } }
$group 分组统计
{
$group: {
_id: "$age",
total: { $sum: 1}
}
}
$project 字段转换
{
$project: {
userId: "$_id",
_id: 0 //不读取
}
}
$lookup 关联查询
{
$lookup: {
from: "user",
localField: "userId",
foreignField: "id", //user中的字段名
as: "user"
}
}
$unwind 拆分数组数据
{ $unwind: "$user" }
可以把数组数据 拆分成多条数据
$addFields 增加字段
{
$addFields: {userName: "$name"}
}
$facet
在同一个聚合管道里执行多个子管道,返回多个结果集。
{
$facet: {
items: [
{ $skip: 0 },{ $limit: 10 }
],
total: [
{
$count: "count"
}
]
}
}
查询返回结果都是数组。