gpt4 book ai didi

mongodb - 在 mongodb 聚合管道中创建价格范围方面

转载 作者:可可西里 更新时间:2023-11-01 09:51:21 25 4
gpt4 key购买 nike

我的文档结构是这样的

{
title : 'a product',
price : 10
}

我想做的是一个动态的价格范围方面,看起来像这样

[
{
facet : '0-30',
count : 5
},
{
facet : '30-100',
count : 40
}
]

显然会有一个固定间隔,例如 50。我曾经让 ElasticSearch 使用直方图函数为我执行此操作,但我无法在 mongo 中使用它。我想,可以做一个 map reduce 来完成它,但我想知道是否有一种方法可以添加到我的聚合管道中。

最佳答案

您可以尝试一个聚合管道,您可以在其中使用 $cond 投影 facet 字段运算符(operator)。为了演示这一点,假设您有一个包含以下文档的集合:

db.collection.insert([
{ "title" : "Product STU", "price" : 10 },
{ "title" : "Product XYZ", "price" : 50 },
{ "title" : "Product PCT", "price" : 14 },
{ "title" : "Product DEF", "price" : 89 },
{ "title" : "Product DYQ", "price" : 34 },
{ "title" : "Product ABC", "price" : 40 },
{ "title" : "Product JKL", "price" : 50 },
{ "title" : "Product PQR", "price" : 75 },
{ "title" : "Product MNO", "price" : 81 },
{ "title" : "Product VWN", "price" : 5 },
{ "title" : "Product KLM", "price" : 63 }
]);

将实现预期结果的聚合管道如下:

db.collection.aggregate([
{
"$match": {
"price": { "$lte": 100, "$gte": 0 }
}
},
{
"$project": {
"title": 1,
"price": 1,
"_id": 0,
"facet": {
"$cond": [ { "$gte": [ "$price", 30 ] }, "30-100", "0-30" ]
}
}
},
{
"$group": {
"_id": "$facet",
"count": {
"$sum": 1
}
}
},
{
"$project": {
"facet": "$_id",
"_id": 0,
"count": 1
}
}
])

输出:

/* 1 */
{
"result" : [
{
"count" : 8,
"facet" : "30-100"
},
{
"count" : 3,
"facet" : "0-30"
}
],
"ok" : 1
}

关于mongodb - 在 mongodb 聚合管道中创建价格范围方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972393/

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