代码之家  ›  专栏  ›  技术社区  ›  Pouya Jabbarisani

如何在mongodb$match aggregate中写入switch/case条件

  •  0
  • Pouya Jabbarisani  · 技术社区  · 7 年前

    我有一个收藏叫 项目 ;在此集合中,我有一个用于项目的字段 货币 还有一块地 价格 数量。

    在快速搜索路径中,我有两个变量调用 美元金额 欧亚大陆 .我的问题是,当文档的货币为“美元”时,我如何按美元金额搜索匹配定价的项目;当文档的货币为“欧元”时,我如何按欧亚山搜索匹配定价的项目;以及 其他货币也是如此 (这意味着我需要一个开关/箱子而不是if/else)?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Dylan Brams    7 年前

    如果没有详细信息,在聚合中可以使用switch语句 MongoDB documentation 在您的查询中,它看起来像这样:

    db.getCollection("Projects").aggregate(
        [
            { $project:
                {price : 
                    {$switch: {
                       branches: [
                          { case: {$eq: ['$currency', 'USD']}, then: '$USDAmount' },
                          { case: {$eq: ['$currency', 'EUR']}, then: '$EURAmount' } ],
                       default: 0
                       }
                    }
                }
            }
        ]
    )
    

    注意:要生成包含货币和金额的复合对象,您可以将(即“$USDAMENT”)替换为:

    {'currency': '$currency', 'amount': '$USDAmount' }
    

    请注意,我添加了默认价格0;您可能希望在$project之前向管道添加$match运算符。

    A more complicated example can be found here.