0

MongoDB では、次の SQL ステートメントのようなものをどのように実装しますか?

select count(*),t1.a,t1.b 
from   t1, t2 
where (t1.id = t2.t1_id) 
and   (t2.t1_id in (select id
                    from t1
                    order by id desc
                    limit 10)) 
group by 2,3 
order by 1 desc

ネストされた選択以外のすべてを行う方法を見つけました。

"$in"現在、ネストされた選択の各値を使用して、外側の選択をループで実行しています。Java コードは次のとおりです。

BasicDBList t1List = new BasicDBList();
DBObject inClause = new BasicDBObject("$in", t1List);
DBObject t2Query = new BasicDBObject("t1s", inClause);
DBObject nextt2;

for (int query = 0; query < 10; query++)
{
    System.out.printf("Running query %d - ", query);
    DBCursor top_ten_t1s = t1Coll.find().sort(new BasicDBObject("v", -1)).limit(10);
    while (top_ten_t1s.hasNext())
    {
        nextt2 = top_ten_t1s.next();
        t1List.clear();
        t1List.add(new Long(nextt2.get("_id").toString()));
        int theCount = t2Coll.find(t2Query).count();
    }
}
4

1 に答える 1

0

MongoDB の 1 つのクエリでこれを行うことはできません。内部クエリの結果を最初にメモリに読み込む必要があります (既に行っているようです)。

var ids = t1.find().sort( { _id: -1 } ).limit(10);

そして、この結果を外側のクエリに適用します。

于 2013-07-17T20:06:35.070 に答える