0

デフォルトのドライバーではなく、mongoDb に Java 非同期ドライバーを使用しています

コレクション「collect」を含むデータベース「test」があり、各ドキュメントは以下の形式であり、時間は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();

ここでは、基準に従うリスト 'time' のみを取得するつもりでした。しかし、私はここで立ち往生しており、グーグルで検索しても役立つリンクがあまり見つかりませんでした。このリンクを参照して、上記のコードを実行しました。同じことを行う簡単な方法はありますか。

編集:そして、次のような 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 に答える