group和project联合使用 --- 2023-04-23

2023-04-22  本文已影响0人  一位先生_

如果你想查用户表中的用户id,昵称,性别,年龄,手机号,每个年龄的数量大小
类似于:select id,nickname,gender,age,mobile,count(age) as sumAges from users;

  1. 使用mongo的话 你可以先使用find查询出所需要的非count信息
  2. 然后使用aggregate聚合查询出每个年龄的个数(这里以age进行分组)
  3. 组装匹配数据

group和project联合使用,分组查询后,返回想要的数据元素
first 相当于group之后 order by 是 asc 如果你想desc的话 可以使用last

db.customized_excel_3rd.aggregate([
        {
            '$group': {
                '_id':{'platform':'$platform'},
                'platform':{"$first":'$platform'},
                'pm_user_id':{"$first":'$pm_user_id'},
                'level':{"$first":'$level'},
                'account_id':{"$first":'$account_id'},
                'sum':{'$sum':'$level'}
                }
        },
    
    {
        '$project': {"sum":1, "platform": 1, "pm_user_id":1, "level":1, "account_id":1, "_id":0}
    }
]);

  1. project 不写的话group中的会都返回
  2. $project写的话 里面元素的值不能为0 只能为1
  3. 如果不想显示的元素 那就在group中直接不写就可以了
db.post.aggregate([
  { "$match": { "rating": "important" } },
  { "$sort": { "date": -1 } },
  { "$limit": 20 },
  { "$lookup": {
    "localField": "user_id",
    "from": "user",
    "foreignField": "_id",
    "as": "userinfo"
  } },
  { "$unwind": "$userinfo" },
  { "$project": {
    "text": 1,
    "date": 1,
    "userinfo.name": 1,
    "userinfo.country": 1
  } }
]);

上一篇下一篇

猜你喜欢

热点阅读