我想对大于或等于,且小于或等于(使用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))));
任何帮助?
答案 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)
)
);