gpt4 book ai didi

node.js - Mongoose:使用自定义函数转换查询/聚合中的值

转载 作者:太空宇宙 更新时间:2023-11-04 01:22:09 25 4
gpt4 key购买 nike

我的产品集合如下所示:

[{
_id: '1',
name: 'Car'
price: {
currency: 'EUR',
value: 1200
}
}, {
_id: '2',
name: 'TV'
price: {
currency: 'GBP',
value: 150
}
}, {
_id: '3',
name: 'Phone'
price: {
currency: 'USD',
value: 240
}
}]

现在,有人向我的后端发送请求,要求显示价格在 10 到 500 PLN 之间的所有产品。我的想法是获取基础货币 PLN 的当前汇率,计算每种产品货币每次迭代的边缘价格(10 和 500),并查看价格是否在计算范围内。问题是我无法构建正确的查询。我尝试过这样的:

const query = [
...(req.query.priceFrom ? [{ "price.value": { "$gte": getCalculatedRange(req.query.priceFrom, '$price.currency') }}] : []),
...(req.query.priceTo ? [{ "price.value": {"$lte": getCalculatedRange(req.query.priceTo, '$price.currency') }}] : [])
];

const products = await Product.find({ $and: query });

正如您所看到的,我希望获得当前迭代产品价格的正确范围,但问题是不可能(或者可能?)将当前迭代中的值(在我的例子中:货币)传递给函数以获得转换后的值。文本“$price.currency”被传递给函数,而不是对象的实际值(我知道这在我看来是显而易见且愚蠢的,但我想彻底说明它并清楚我所遇到的困难)。

有办法让它发挥作用吗?

最佳答案

通过聚合和组合运算符解决了这个问题,例如:

  • $addFields - 用于创建临时字段以保留转换后的价格
  • 针对多种货币情况的嵌套 $switch:

    $switch: {
    branches: [
    {
    case: { $eq: ['eur', '$price.currency'] },
    then: { $multiply: ['$price.value', getRate(req.query.priceUnit.toLowerCase(), 'eur')] },
    }, {
    case: /* next case */
    }
    ],
    default: '$price.value'
    }
  • $redact + $cond + $gte/$lte 检查转换后的价格是否在特定范围内(如果是:$$KEEP,否则:$$PRUNE)

关于node.js - Mongoose:使用自定义函数转换查询/聚合中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58845503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com