我有一个名为 Projects 的收藏集;在此集合中,我有一个项目的 currency 字段和一个 price 金额字段。
在Express搜索路线中,我有2个变量,分别为 USDamount 和 EURamount 。我的问题是,当文档货币为“ USD”时,如何通过USDamount搜索匹配价格的项目;当文档货币为“ EUR”,并为以此类推?时,如何通过EURamount搜索匹配价格的项目(这意味着我需要开关/大小写,而不是if / else)?
答案 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}}