var express = require('express');
var router = express.Router();
var {userModel,userInfoModel,categoryModel} = require("../model/model")
/**
-
关联查询 aggregate
-
xxxModel.agggregate([{},{},...]) //语法格式
-
$lookup : {} 关联查询
-
$match : {} 条件查询
-
$skip : 数值
-
$limit : 数值 分页查询
-
$sort : {} 排序
-
$group : {} 分组查询
-
$project:{字段:1} 查询指定字段
*/
//查询用户详细信息
router.get('/userInfo_list',async function(req,res,next){
/*let data = await userInfoModel.aggregate([
{$match:{nichname:'小鱼'}},
{$skip:1}
])*/
// 关联查询 $lookup 匹配项使用
// 使用详细信息 并关联该详细信息对应的账号
let data = userInfoModel.aggregate([
{$lookup:{
from:'users', //别关联的集合名
localField:'user', //当前查询的model中关联的字段
foreignField:'_id', // 被关联的集合中的字段
as:'user' //关联查询的结果的别名 //数组
}}
])
res.json(data)
})
// 分组查询
//按照性别进行分组 查询 用户的平均年龄
router.get('/group_by_sex',async (req,res)=>{
let data = await userInfoModel.aggregate([
{$group:{
_id:"xxx
avgAge: { age" } //统计平均年龄
}}
])
// let data = await userInfoModel.aggregate([
// {$group:{
// _id:"$sex", //分组的字段
// count:{ $sum: 1 } //统计男女生人数
// }}
// ])
//子查询: 自己查询自己 集合需要有一个pid字段
/**
-
商品无分离
-
分类集合 cates
-
name
-
level
-
pid
-
id name pid level
-
1 服装 1
-
2 家电 1
-
3 男装 1 2
-
4 女装 1 2
-
5 男装衬衫 2 3 ???
*/
res.json(data)
})
//自查询
router.get('/category_list',async function(req,res,next){
let data = await categoryModel.aggregate([
{$lookup:{
from:'category',
localField:'_id',
foreignField:'pid',
as:'childern',
// pipeline:[
// //管道查询 上一级查询的结果会自动进行下一级进行查询
// {$lookup:{
// from:'category',
// localField:'_id',
// foreignField:'pid',
// as:'childern'
// }}
// ]
}},
// {$match:{level:1}}
])
res.json(data)
})
//无限级分类 自封装的代码
router.get('/cates_list',async (req,res,next)=>{
// mongoose中查询出来的数组对象不能直接添加新属性,需要lean()方法
let cates = await categoryModel.find().lean() //.lean() 添加动态属性
let data = [] //最终结果的数组
let jsonCate = {} //一个对象中添加多个键值对
//遍历cates所有数据 形成 以_id为键 _id对应的这条数据为值的一个json对象
cates.forEach(item=>{
jsonCate[item._id] = item
})
// 遍历cates
cates.forEach(item=>{
// 判断是否是一级分类,如果是一级分类,直接添加到存放结果的数组data中
if(!item['pid']){ // 一级分类
data.push(item)
}else{
//说明不是一级分类 判断当前分类商品的父级是否有children属性
if(!jsonCate[item['pid']]['children']){ //当前分类商品的父级没有children属性
jsonCate[item['pid']]['children'] = []
}
jsonCate[item['pid']]['children'].push(item)
}
})
res.json(cates,jsonCate,data)
})
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
module.exports = router;