簡體   English   中英

使用Node.js與聚合管道在mongo中創建價格范圍

[英]Create Price Range in mongo with aggregation pipeline with Nodejs

不會創建價格范圍使用mongodb聚合管道..在使用彈性搜索或solr時,我們可以直接獲取價格過濾器范圍值...如果我的產品價格不存在該范圍內的產品,我該如何創建價格范圍不要創建該范圍...

{ 
    "_id" : ObjectId("5657412ddb70397479575d1d"),"price" : 1200
},
{ 
    "_id" : ObjectId("5657412ddb70397479575d1d"),"price" : 200
},
{ 
    "_id" : ObjectId("5657412ddb70397479575d1d"),"price" : 2000
},
{ 
    "_id" : ObjectId("5657412ddb70397479575d1d"),"price" : 2020
},
{ 
    "_id" : ObjectId("5657412ddb70397479575d1d"),"price" : 100
},
{ 
    "_id" : ObjectId("5657412ddb70397479575d1d"),"price" : 3500
},
{ 
    "_id" : ObjectId("5657412ddb70397479575d1d"),"price" : 3900
}

從上面我必須使用Mongo聚合來創建價格范圍,如平價產品價格一樣,可以在flipkart或myntra中使用過濾器...

[
        {
            range : '100-200',
            count : 2
        },
        {
            range : '1200-2020',
            count : 3
        },
        {
            range : '3500-3900',
            count : 2
        }

]

聚合框架管道中,您可以在$project階段利用$cond運算符創建一個額外的字段,該字段指示價格所屬的范圍,然后使用$group步驟獲取計數:

var pipeline = [    
    {
        "$project": {
            "price": 1,
            "range": {
                "$cond": [ 
                    {
                        "$and": [
                            { "$gte": ["$price", 100] },
                            { "$lte": ["$price", 200] }
                        ]
                    }, 
                    "100-200", 
                    {
                        "$cond": [ 
                            {
                                "$and": [
                                    { "$gte": ["$price", 1200] },
                                    { "$lte": ["$price", 2020] }
                                ]
                            }, 
                            "1200-2020", "2021-above" 
                        ]
                    }
                ]
            }
        }
    },
    { 
        "$group": { 
            "_id": "$range",             
            "count": { "$sum": 1 }
        }  
    },
    {
        "$project": {
            "_id": 0,             
            "range": "$_id",
            "count": 1

        }
    }
];

collection.aggregate(pipeline, function (err, result){
     if (err) {/* Handle err */};
     console.log(JSON.stringify(result, null, 4));
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM