2016-04-27 4 views
1

MongoDB версия 3.0.6MongoDB: Запрос с или заявления

Так у меня есть этот запрос, где я хочу, чтобы выполнить некоторые меньше и больше операций. Кроме того, я хочу выполнить операцию 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 равным 2 или 4.

+0

ha взгляните на это http://stackoverflow.com/questions/10620771/how-can-i-build-an-or-query-for-mongodb-using-the-java-driver – piyushj

ответ

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))); 
); 
+1

Спасибо, сэр! :) – kongshem