0

我正在为 mongoDb 使用 java 异步驱动程序,而不是默认驱动程序

我有一个带有集合“收集”的数据库“测试”,每个文档都采用下面给出的形式,其中时间是 10 位 unix 时间戳

{ "_id", "userId", "programId", "time" }

我想编写一个查询,它相当于下面给出的 sql 查询,其中 input1 是 unix 时间戳格式的当前时间,而 input2 是作为输入的 userId

SELECT * 
FROM collect 
WHERE time >= input1 AND userId = input2 
ORDER BY time DESC 
LIMIT 30

我做了这样的事情

collection = db.getCollection("ProgramBookings"); Long Datetimesatmp =
new Date().getTime() / 1000;

Aggregate.Builder builder = new Aggregate.Builder();

builder = (builder.match(where("time").
          greaterThan(Datetimesatmp.toString()).and("userId")     .equals(userId.toString())).sort(desc("time"))).limit(30);

Aggregate d1 = builder.build();

在这里,我只想检索遵循标准的列表“时间”。但我被困在这里,谷歌搜索后找不到太多有用的链接。我参考了这个链接来完成上面给定的代码。有没有一种简单的方法来做同样的事情。

编辑:我想将值添加到 ProgramTime 对象列表中,就像

public class ProgramTime {

    private Integer userId;     
      private Integer programId;    
      private Long time; 
}
4

1 回答 1

1

我认为聚合框架在这里不是正确的选择。我会直接“查找”。有一个Find类和嵌套Find.Builder类用于构建更复杂的查询。

import static com.allanbank.mongodb.builder.QueryBuilder.where;

import com.allanbank.mongodb.MongoClient;
import com.allanbank.mongodb.MongoCollection;
import com.allanbank.mongodb.MongoFactory;
import com.allanbank.mongodb.MongoIterator;
import com.allanbank.mongodb.bson.Document;
import com.allanbank.mongodb.builder.Find;
import com.allanbank.mongodb.builder.Sort;

public class StackOverFlow {
    // SELECT * FROM collect
    // WHERE time >= input1 AND userId = input2
    // ORDER BY time DESC
    // LIMIT 30
    public static void query(long input1, String input2) {
        MongoClient client = MongoFactory
                .createClient("mongodb://localhost:27017/");

        // SELECT * FROM collect -- Kinda...
        MongoCollection collection = client.getDatabase("test").getCollection(
                "collect");

        Find.Builder builder = Find.builder();
        // WHERE time >= input1 AND userId = input2
        builder.query(where("time").greaterThan(input1).and("userId")
                .equals(input2));
        // ORDER BY time DESC
        builder.sort(Sort.desc("time"));
        // LIMIT 30
        builder.limit(30);

        try (MongoIterator<Document> iter = collection.find(builder)) {
            for (Document doc : iter) {
                System.out.println(doc);
            }
        }
    }
}
于 2013-06-26T01:59:01.827 回答