node mongoose的aggregate多表查询如何使用
1.分类统计数量个数
BlogModel.aggregate(
[
{
$project: {
tag: 1,
uid:1,
sum:1
},
},
{
$match:{
uid:mongoose.Types.ObjectId(uid)
}
},
{
$group:{
_id:"$tag",
sum:{$sum: 1},
}
},
],function (err, docs) {
if(err){
return res.send(err)
}
res.send(docs);
}
)
})
2.分类统计总和 总价值
router.get("/allscan", (req, res) => {
var uid = mongoose.Types.ObjectId(global.token);
BlogModel.aggregate(
[
{
$project: {
//只有被设置进去的字段才会显示出来,其他列就不会被显示。
// day : {$substr: [{"$add":["$create_time", 28800000]}, 0, 7] },
view: 1,
commets:1,
uid:1
},
},
{
$match:{
uid:uid
}
},
{
$group:{
_id:"$uid",
totalViews:{$sum: "$view"},
totalComments:{$sum: "$commets"},
}
},
],
function (err, docs) {
res.send(docs);
}
);
});router.get("/allscan", (req, res) => {
var uid = mongoose.Types.ObjectId(global.token);
BlogModel.aggregate(
[
{
$project: {
//只有被设置进去的字段才会显示出来,其他列就不会被显示。
// day : {$substr: [{"$add":["$create_time", 28800000]}, 0, 7] },
view: 1,
commets:1,
uid:1
},
},
{
$match:{
uid:uid
}
},
{
$group:{
_id:"$uid",
totalViews:{$sum: "$view"},
totalComments:{$sum: "$commets"},
}
},
],
function (err, docs) {
res.send(docs);
}
);
});
3.多表查询
User.aggregate([
{
$lookup: {
from: "resource",
localField: "resource",
foreignField: "_id",
as: "items",
},
},
{
$project:{ password:0,username:0,emial:0,resource:0}
},
{
$match: {
"_id": mongoose.Types.ObjectId(uid),
},
},
],(err,docs)=>{
return res.send(docs)
});