MongoDB:在java中使用$ gte和$ lte进行查询

时间:2015-09-29 14:44:06

标签: java mongodb querying

我想对大于或等于,且小于或等于(使用java btw的I' m)的字段执行查询。换一种说法。 > =和< =。据我所知,mongoDB有$ gte和$ lte运算符,但我找不到合适的语法来使用它。我访问的字段是顶级字段。

我设法让这个工作:

FindIterable<Document> iterable = db.getCollection("1dag").find(new Document("timestamp", new Document("$gt", 1412204098)));

以及屁股......

FindIterable<Document> iterable = db.getCollection("1dag").find(new Document("timestamp", new Document("$lt", 1412204098)));

但是你如何将这些相互结合?

目前我正在玩这样的声明,但它不起作用:

FindIterable<Document> iterable5 = db.getCollection("1dag").find(new Document( "timestamp", new Document("$gte", 1412204098).append("timestamp", new Document("$lte",1412204099))));

任何帮助?

2 个答案:

答案 0 :(得分:6)

基本上你需要这样的范围查询:

db.getCollection("1dag").find({
    "timestamp": {
        "$gte": 1412204098,
        "$lte": 1412204099
    }
})

由于此范围查询需要多个查询条件,因此您可以使用 append() 方法向查询文档附加条件来指定逻辑连接(AND):

FindIterable<Document> iterable = db.getCollection("1dag").find(
        new Document("timestamp", new Document("$gte", 1412204098).append("$lte", 1412204099)));

答案 1 :(得分:2)

构造函数new Document(key, value)只会为您提供一个包含一个键值对的文档。但在这种情况下,您需要创建一个包含多个文档的文档。为此,请创建一个空文档,然后使用.append(key, value)为其添加对。

Document timespan = new Document();
timespan.append("$gt", 1412204098);
timespan.append("$lt", 1412204998);
// timespan in JSON: 
// { $gt: 1412204098, $lt: 1412204998}
Document condition = new Document("timestamp", timespan);
// condition in JSON:
// { timestamp: { $gt: 1412204098, $lt: 1412204998} }

FindIterable<Document> iterable = db.getCollection("1dag").find(condition);

或者如果你真的想用一个没有临时变量的单行代码来做这件事:

FindIterable<Document> iterable = db.getCollection("1dag").find(
    new Document()
        .append("timestamp", new Document()
             .append("$gt",1412204098)
             .append("$lt",1412204998)
        )
);