1.使用场景:开发中经常用到多表查询及希望一些查询条件直接通过数据库操作,可以使用mongodb 达到代码简化等效果
2.管道操作符
$match: 用来过滤某些条件
示例:查询认证时间大于某个时间的记录
db.licence_test.aggregate( [
{
"$match":{
"auth_stime": {"$gt": 1560614400000}
}
}
])
$project: 用来过滤数据,只输出符合条件的文档, 默认添加_id
示例:
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);
不添加_id,_id:0
$unwind: 用来将某一数据类型拆分成多条记录,每条记录包含数组中的一个值
$limit,skip
$group: 分组
查询某个客户资产总数:
db.licence_test.aggregate([
{
$group: {
"_id":"$customer_id",
"asset": {"$sum": "$max_assets"}
}
}
])
查询所有客户资产总数:
db.licence_test.aggregate([
{
$group: {
"_id":null,
"asset": {"$sum": "$max_assets"}
}
}
])
查询客户总数(一个客户可能有多条记录)
db.licence_test.aggregate([
{
$group: {
"_id": "$customer_id",
}
},
{
$group: {"_id":null, "total": {"$sum": 1}}
}
])
$filter: 选择要根据指定条件返回的数组子集。返回仅包含与条件匹配的元素的数组。返回的元素按原始顺序排列。
db.Vm_OrderInfo.aggregate(
[
{
$lookup: {
from: "Vm_TaskNode",
localField: "order_id",
foreignField: "order_id",
as: "order_node"
}
},
{
"$project":{
"order_node":{
"$filter":{
input:"$order_node",
as: "order_node",
cond:{
"$ne":["$$order_node.close_time", 0]
}
}
}
}
}
]
)
$lookup:连表查询
a表联合b表查询 { $lookup: { from: b, localField: order_id(a表), foreignField: -id(b表), as: new_projection } }