我的文档具有以下属性的集合:在Mongo中,如何匹配基于范围的文档?
{
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
蒙戈应该返回第一个文件:
因为
11 <= 12 <= 15
and 11 <= 14 <= 15
但我在创建Mongo匹配条件时遇到了问题(我很新)。我一遍又一遍地阅读了文档,但是我一直得到的结果应该与某些文档不匹配。
上面的公式是
documentMinEmployees <= userInputMinEmployees <= documentMaxEmployees
和 documentMinEmployees <= userInputMaxEmployees <= documentMaxEmployees
这是蒙戈查询我试图使用的当前迭代:
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)
我的主要问题是,我不知道如何写在这蒙哥匹配条件:
minEmployees <= userInput <= maxEmployees
和minEmployees <= userInput2 <= maxEmployees
这正是我想要的结果。我试图让我的匹配查询过于复杂。我记得我的查询的第一次迭代看起来与您答案中的查询非常相似,但我的后面是$ lte和$ gte。直到今天才注意到。 – ILikeTacos 2014-10-10 15:07:36
你会熟悉这种表达(BSON)和一些练习。 :) – Wizard 2014-10-10 15:12:13