在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%)。我需要的是一个基于更新价格的分类产品列表。