mongodb聚合到数组最后一个元素之间的划分



我有一个提要,其中包含我存储在数据库中的产品(因此我无法控制数据的结构或属性(。提要存储在mongoDB中,稍后可在网站上访问。这是存储在数据库中的数据示例。

{
productName: 'ABC',
price: {
previous: [null, null, 100],
latest: [200, 200, 200],
},
};

我想在网站上按最大折扣的顺序列出产品。I.e price.latest/price.previous。我试了很多,我想做这样的事情:

$set: {
discount: {
$cond: {
if: {
$and: [
{ $gt: [{ $last: '$price.latest' }, null] },
{ $gt: [{ $last: '$price.previous' }, null] },
],
},
then: {
$divide: [
{ $last: '$price.latest' },
{ $last: '$price.previous' },
],
},
else: null,
},
},
}

我不能让它工作,我不知道它是否是部门崩溃的空检查。:/

从这里可以看出,您的语法是正确的,您唯一遗漏的边缘大小写是price.previous等于0的情况。这是一个简单的解决方案,因为您只需在$gt条件下将null更改为0

{
$set: {
discount: {
$cond: {
if: {
$and: [
{
$gt: [
{
$last: "$price.latest"
},
0
]
},
{
$gt: [
{
$last: "$price.previous"
},
0
]
}
]
},
then: {
$divide: [
{
$last: "$price.latest"
},
{
$last: "$price.previous"
}
]
},
else: null
}
}
}
}

Mongo游乐场

最新更新