2015-04-22 109 views
1

我有一個廣告系列集合,這是廣告客戶。它的模式是:MongoDB價值匹配範圍

var campaignSchema = new mongoose.Schema({ 
    name: String, 
    sponsor: String, 

    [...] 

    target: { 
    age: { 
     lower: Number, 
     upper: Number 
    }, 
    gender: String, 
    locations: Array, // [ { radius: '', lon: '', lat: '' } ] 
    activities: Array 
    } 
}); 

我需要運行一個特定年齡的查詢,並返回所有活動,其中年齡是age.lowerage.higher之間。

我已閱讀文檔$gt$lt,但它們似乎只能以單向方式工作(所以我可以指定一個範圍並匹配一個值,但是我需要指定一個值並匹配一個範圍)。

有什麼建議嗎?

回答

0

您可以先對該值的下限創建查詢,按降序對結果進行排序並從結果中獲取頂部文檔。將該文檔與上限進行比較,如果匹配,那麼該文檔的範圍包含該年齡。例如:

var age = 23; 
var ads = db.campaign.find({ "age.lower": {"$lte": age } }).sort({"age.lower": -1}).limit(1); 

if (ads != null) { 
    var result = ads[0]; 
    if (result.age.upper > age) { 
     return result; 
    } else { 
     return null; 
    } 
} 
0

對不起,我誤解了這個問題,我現在明白了。

db.collection.find({ "age.lower": { $lt: value1 }, "age.upper": { $gt: value1 } }); 

因此,舉例來說,如果你的範圍是25到40,和值1爲30,25 < 30和40> 30 - 匹配!

如果您使用與20,25相同的範圍! < 20 - 不匹配。