MongoDB:使用或语句查询

时间:2016-04-27 12:04:35

标签: java mongodb

MongoDB 3.0.6版

所以我有这个查询,我想执行一些小于和大于操作。另外,我想执行or操作,但我无法弄清楚java中的语法。以下是我到目前为止:

FindIterable<Document> iterable3 = db.getCollection(collectionName).find(
    new Document()
        .append("timestamp", new Document()
               .append("$gte", startTime)
               .append("$lte", endTime))
        .append("hourOfDay", new Document()
                .append("$gte", minHourOfDay)
                .append("$lte", maxHourOfDay))
        .append("dayOfWeek", new Document()
                .append("$or", new Document("2","4")))

);

我想要的是查询还要检查dayOfWeek参数是否等于24

1 个答案:

答案 0 :(得分:3)

使用 $in 运算符,如下所示:

db.collection.find({ 
    "timestamp": { "$gte": startTime, "$lte": endTime },
    "hourOfDay": { "$gte": minHourOfDay, "$lte": maxHourOfDay },
    "dayOfWeek": { "$in": [2, 4] }
});

以上查询是使用$or运算符的以下查询的更简单版本:

db.collection.find({ 
    "timestamp": { "$gte": startTime, "$lte": endTime },
    "hourOfDay": { "$gte": minHourOfDay, "$lte": maxHourOfDay },
    "$or": [
        { "dayOfWeek": 2 },
        { "dayOfWeek": 4 }
    ]
});

所以你的最终Java代码看起来像

FindIterable<Document> iterable3 = db.getCollection(collectionName).find(
    new Document()
        .append("timestamp", new Document()
               .append("$gte", startTime)
               .append("$lte", endTime))
        .append("hourOfDay", new Document()
                .append("$gte", minHourOfDay)
                .append("$lte", maxHourOfDay))
        .append("dayOfWeek", new Document("$in", Arrays.asList(2, 4)));
);