在MongoDB中查询,并根据一些规则更改价格值后对结果进行排序/

在MongoDB中查询,并根据一些规则更改价格值后对结果进行排序/,mongodb,nosql,mongodb-query,graphql,Mongodb,Nosql,Mongodb Query,Graphql,在这种情况下,我希望根据价格按顺序(排序)检索产品列表。但我必须进行列表排序的价格将是更新价格,即产品集合的价格+/-规则集合中提到的更改 这意味着: 对于每种产品,首先我必须检查是否有任何规则与产品匹配。如果是,则我必须更改价格,然后对其进行排序 到目前为止,我试过: let prodArray = db.product.find().map(function(prod) { var rule = db.rules.findOne({target: "product"}); v

在这种情况下,我希望根据价格按顺序(排序)检索产品列表。但我必须进行列表排序的价格将是更新价格,即产品集合的价格+/-规则集合中提到的更改

这意味着: 对于每种产品,首先我必须检查是否有任何规则与产品匹配。如果是,则我必须更改价格,然后对其进行排序

到目前为止,我试过:

let prodArray = db.product.find().map(function(prod) {
    var rule = db.rules.findOne({target: "product"});
    var newPrice = prod.price;
    if(!rule.children.length) {
        if(rule.check) {
            var checkValue = prod[rule.check];
            var isApplyModifier = false;
            if(rule.operator === 'equals') {
                if(checkValue == rule.value) {
                    isApplyModifier = true;
                }
            }
            if(isApplyModifier) {
                var effect = rule.modifiers[0].effects[0];
                if(effect.value.indexOf('%') !== '-1') {
                    var discountPercentage = effect.value.split('%')[0];
                    var originalPrice = prod.price;
                    newPrice = originalPrice - (originalPrice*discountPercentage)/100;
                }
            }
        }
    }
    prod.newPrice = newPrice;
    return prod;
});

return prodArray.sort(function(a, b){
    return a.newPrice-b.newPrice
}); 
但是我需要一些解决方案,这样我也可以使用光标进行分页

对于示例,我的产品和规则集合将包含以下记录:

db.product.insert({name: "a", price: 10});
db.product.insert({name: "b", price: 30});
db.product.insert({name: "c", price: 20});
db.product.insert({name: "d", price: 40});
db.product.insert({name: "e", price: 50});

db.rules.insert({
    "main" : true,
    "name" : "Rule no. 1",
    "active" : true,
    "children" : [],
    "type" : "and",
    "path" : null,
    "target" : "product",
    "modifiers" : [{
        _id: '001',
        name: '10% discount',
        description: 'Apply 10% discount to price',
        effects: [
            {
                field: 'price',
                operation: 'subtract',
                value: '10%'
            }
        ]
    }],
    "check" : "name",
    "operator" : "equals",
    "value" : "a"
}) 

如果您发布您的实际收集和输出,并给出一些解释,那么最好回答您的问题我已经给出了产品和规则收集的数据。规则集合数据包含以下信息:“检查”:“名称”、“运算符”:“等于”、“值”:“a”,这意味着如果(产品的名称==值),则应用修饰符的效果,即{字段:'price',操作:'subtract',值:'10%},这意味着最终价格将是(产品的价格-产品价格的10%)。我需要的是一个基于更新价格的分类产品列表。