我有一系列具有以下属性的文档:
{
name: "Acme",
minEmployees: 11,
maxEmployees: 15,
price: 20,
priceMultiplierEmployees: 1.5
}
{
name: "Acme",
minEmployees: 0,
maxEmployees: 10,
price: 10
priceMultiplierEmployees: 1.2
}
{
name: "Acme",
minEmployees: 16
maxEmployees: 20
price: 50,
priceMultiplierEmployees: 1.6
}
因此,如果我的某位用户输入minEmployees = 12
和maxEmployees = 14
Mongo应该返回第一个文件:
,因为
11 <= 12 <= 15
和11 <= 14 <= 15
但是我在Mongo中创建匹配条件时遇到了问题(我相当新)。我一遍又一遍地阅读文档,但我不断得到与某些文档不匹配的结果。
上面的公式是
documentMinEmployees <= userInputMinEmployees <= documentMaxEmployees
和
documentMinEmployees <= userInputMaxEmployees <= documentMaxEmployees
这是我尝试使用的mongo查询的当前迭代:
db.products.aggregate(
[
{
$match: {
name: "Acme",
minEmployees: {$lte: 12}
}
},
{
$group: {
_id: {name: "$name", price: "$price"},
lowEndEmployees: {
$max: "$minEmployees"
},
finalPrice: {
$max: {
$add: ["$price", {$multiply: ["$priceMultiplierEmployees", {$subtract: [12, "$minEmployees"]}]}]
}
}
}
}
]
);
上面的查询,现在返回以下文档(按预期):
{
name: "Acme",
minEmployees: 11,
maxEmployees: 15,
price: 20,
priceMultiplierEmployees: 1.5
}
{
name: "Acme",
minEmployees: 0,
maxEmployees: 10,
price: 10
priceMultiplierEmployees: 1.2
}
但是我想要它返回的只是一个文档,其结果如下。
{
name: "Acme",
price: 20,
finalPrice: 30
}
finalPrice
是以下操作的结果:20 * 1.5(12 - 11)
我的主要问题是我不知道如何在Mongo中写出这种匹配条件:
minEmployees <= userInput <= maxEmployees
AND minEmployees <= userInput2 <= maxEmployees
答案 0 :(得分:2)
根据您想要的最终结果如下:
{
name: "Acme",
price: 20,
finalPrice: 30
}
您可以使用:
var min = 12, max = 14;
db.products.aggregate([ {
$match : {
name : "Acme",
minEmployees : {
$lte : min
},
maxEmployees : {
$gte : max
}
}
}, {
$project : {
_id : 0,
name : "$name",
price : "$price",
finalPrice : {
$multiply : [ "$price", "$priceMultiplierEmployees", {
$subtract : [ min, "$minEmployees" ]
} ]
}
}
} ]);