我的文檔具有以下屬性的集合:在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