gpt4 book ai didi

Mongoose 有条件地聚合和求和

转载 作者:行者123 更新时间:2023-12-04 07:41:40 34 4
gpt4 key购买 nike

我一整天都在为这个问题苦苦挣扎,所以我现在带着它来找你。
我定义了一组喜欢的产品:

// Product schema
{
brand: String,
size: String,
colour: String,
...
}
我正在寻找一个品牌的所有商品,并使用以下过滤器:
// Standard filtered search
const match = {
brand: 'brand1'
}
Product.find(match)
它返回两个结果:
// Result set
{ brand: 'brand1', size: 'M', colour: 'RED', ... },
{ brand: 'brand1', size: 'S', colour: 'GREEN', ... }
现在我面临的问题:
我想为每个过滤器(品牌、尺寸、颜色……)列出一组可能的值(红色、绿色、M、S、brand1、brand2……),以及它们相应的总和在实际的过滤结果集中。
我不知道如何正确解释,但这是我想要的结果:
[{
"brand": [
{
"_id": "brand1",
"count": 2
}, {
"_id": "brand2",
"count": 0
}, {
"_id": "brand3",
"count": 0
}
],
"size": [
{
"_id": "M",
"count": 1
}, {
"_id": "S",
"count": 1
}, {
"_id": "L",
"count": 0
}
],
"colour": [
{
"_id": "RED",
"count": 1
}, {
"_id": "GREEN",
"count": 1
}, {
"_id": "ORANGE",
"count": 0
}
],
}]
我试过的
我设法通过以下聚合查询获得此结构;它对所有键进行分组,但将它们全部加起来,代表全局数据库,而不是过滤后的数据库。如果我在 $facet 之前添加 { $match: ... } ,它只会对过滤器的可用键进行分组,并省略应该归零的键...
// Doesn't work : All the keys with sum 0 are ignored
Product.aggregate([
{
$facet: {
brand: [{ $sortByCount: "$brand" }],
size: [{ $sortByCount: "$size" }],
colour: [{ $sortByCount: "$colour" }],
...
}
}
])
// Doesn't work : All keys are present, but the sums are not right
Product.aggregate([
{
$match: { brand: "brand1" }
},
{
$facet: {
brand: [{ $sortByCount: "$brand" }],
size: [{ $sortByCount: "$size" }],
colour: [{ $sortByCount: "$colour" }],
...
}
}
])
我希望这很清楚,我尽我所能来解释我的问题,如果有人能提出一个想法,我将不胜感激:)
如果您需要更多信息,请询问。

最佳答案

  • $set创建一个字段,如 searchBrand ,如果品牌是您的搜索分支,请检查您的条件,然后将其设置为 1,否则为 0
  • $group按方面中的特定字段并计算 searchBrand领域
  • $sort来自 count按降序排列
  • db.collection.aggregate([
    {
    $set: {
    searchBrand: {
    $cond: [{ $eq: ["$brand", "brand1"] }, 1, 0]
    }
    }
    },
    {
    $facet: {
    brand: [
    {
    $group: {
    _id: "$brand",
    count: { $sum: "$searchBrand" }
    }
    },
    { $sort: { count: -1 } }
    ],
    size: [
    {
    $group: {
    _id: "$size",
    count: { $sum: "$searchBrand" }
    }
    },
    { $sort: { count: -1 } }
    ],
    colour: [
    {
    $group: {
    _id: "$colour",
    count: { $sum: "$searchBrand" }
    }
    },
    { $sort: { count: -1 } }
    ]
    }
    }
    ])
    Playground

    关于 Mongoose 有条件地聚合和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67426425/

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