使用MongoDB匹配值范围

时间:2015-04-22 21:35:15

标签: node.js mongodb mongoose

我有一个广告系列广告系列。它的架构是:

NullPointerException

我需要运行具有特定年龄的查询,并返回年龄介于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.lower之间的所有广告系列。

我已阅读age.higher$gt的文档,但它们似乎只是单向工作(所以我可以指定一个范围并匹配一个值,但是我需要指定一个值并匹配范围)。

有什么建议吗?

1 个答案:

答案 0 :(得分: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;
    } 
}