如何在Mongodb $ match聚合中编写开关/案例条件

时间:2018-07-10 10:07:37

标签: mongodb mongoose

我有一个名为 Projects 的收藏集;在此集合中,我有一个项目的 currency 字段和一个 price 金额字段。

在Express搜索路线中,我有2个变量,分别为 USDamount EURamount 。我的问题是,当文档货币为“ USD”时,如何通过USDamount搜索匹配价格的项目;当文档货币为“ EUR”,并为以此类推?时,如何通过EURamount搜索匹配价格的项目(这意味着我需要开关/大小写,而不是if / else)?

1 个答案:

答案 0 :(得分:2)

在没有详细信息的情况下,您可以在聚合中使用switch语句more complicated example can be found here.,并且在查询中它看起来像这样:

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

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

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

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

一个{{3}}