V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐工具
RoboMongo
推荐书目
50 Tips and Tricks for MongoDB Developers
Related Blogs
Snail in a Turtleneck
EZVIK
V2EX  ›  MongoDB

mongodb 关于 条件分组查询的问题

  •  
  •   EZVIK · 204 天前 · 619 次点击
    这是一个创建于 204 天前的主题,其中的信息可能已经有所发展或是发生改变。
    [{
       _id :"1",
       value: 10
    },
    {
       _id :"1",
       value: 20
    },
    {
       _id :"1",
       value: 100
    }...]
    

    请教大家一个查询的问题,我想按照 value 的范围进行分组统计, 比如 0-50,返回的结果为

    [ { "_id": "0_50", count: 2}, {"_id": "50_100": count: 1}]
    

    类似这样, 不知是否可行

    5 条回复    2021-05-17 18:35:14 +08:00
    ch2
        1
    ch2  
       204 天前
    只能一项一项目来,像这样
    ```
    collection.aggregate([{
    "$project": {
    "50": {
    "$cond": {
    "if": {"$eq": [50, "$value"]},
    "then": 1,
    "else": 0
    }
    },
    "100": {
    "$cond": {
    "if": {"$eq": [100, "$value"]},
    "then": 1,
    "else": 0
    }
    }
    }
    },
    {
    "$group": {
    "_id": "$id",
    "50": {
    "$sum": "$50"
    },
    "100": {
    "$sum": "$100"
    }
    }
    }])
    ```
    EZVIK
        2
    EZVIK  
    OP
       204 天前
    @ch2 我试试看 谢谢!
    catinsides
        3
    catinsides  
       204 天前   ❤️ 1
    把楼上的$eq 换成 $and: [{$gte: ['$value', 50], {$lte: ['$value', 100]}}]
    EZVIK
        4
    EZVIK  
    OP
       204 天前
    @catinsides 感谢 已经解决了。
    EZVIK
        5
    EZVIK  
    OP
       204 天前
    解决方法 感谢楼上两位老哥
    .aggregate([
    {
    "$project": {
    "0_1000": {
    "$cond": {
    "if": {
    $and: [{$gte: ['$value', 0]}, { $lte: ['$value', 1000] } ]
    },
    "then": 1,
    "else": 0
    }
    }
    }
    },
    {
    "$group": {
    "_id": "$id",
    "0_1000": {
    "$sum": "$0_10000
    }
    }
    }
    ])
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3825 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:44 · PVG 11:44 · LAX 19:44 · JFK 22:44
    ♥ Do have faith in what you're doing.