$project
筛选字段
//与order.find({},{'trade_no': 1, 'all_price': 1})类似,但是更灵活
//只查询trade_no与all_price
order.aggregate([
{
$project: {trade_no: 1, all_price: 1}
}
])
$match
同样是筛选,但是粒度更细,类似mysql
where
语句
//只查询trade_no与all_price,并且all_price不小于80
// **使用条件查询时,如果涉及mongoose.Types.ObjectId,一定要加**
order.aggregate([
{
$project: {trade_no: 1, all_price: 1}
},{
$match: {'all_price':{$gte: 80},'_id': mongoose.Types.ObjectId(_id)}
}
])
$group
分组
//以order_id进行分组,并对每组的num值进行相加
order.aggregate([
{
$group: {_id: '$order_id', total: {$sum: '$num'}}
}
])
$sort
排序…
$skip
偏移量…
$limit
条数限制…
$lookup表关联查询
//聚合查询并且进行模糊查询
order.aggregate([
{
$lookup: {
from: 'order_item'//和这个表进行关联查询
localField: 'order_id'//order表中的order_id
foreginField: 'order_id'//order_item表中的order_id
as: 'items'
}
},
{
$match: {'items.name': {$regex: 'xx'}}
}
])