0

私は、ウェブサイトとそこにあるリンクを表す次のmongoドキュメントを持っています。

 {"website":
     "id":"123456",
     "links":[
                 "link1","link2","link3",..."link1000"
                ]
 }

そして、ページネーションをサポートするために、id で見つかった特定のドキュメントから限られた数のリンクを返したいと考えています。私はこのようなことを試みましたが、うまくいきません。サブドキュメントの数を制限する方法はありますか?

 String query="{'website.id:'"+id+"'}";
 String fields="{links:1}";
 DBCursor dbCursor=this.getCollection(crawlersCollection)
      .find(this.query(query),this.query(fields)).skip(skip).limit(limit);

私が試した他のアプローチは、 $slice を使用することです

 String fields="{'links':{'$slice':["+skip+","+limit+"]}}";

しかし、ページネーションにはあまり役に立たないため、これはうまく機能しません。たとえば、43 個のリンクがある場合、page=2 に limit=100 を指定すると 43 個の結果が返されるため、クエリを作成する前にリンクの数を確認する必要があります。

この問題を解決する方法について何か提案はありますか?

ありがとう

4

1 に答える 1

2

正しいアプローチは、$slice演算子を使用することです。ページネーションを容易にするには、「スキップ」と「制限」を決定する方法を変更する必要があります。

たとえば、ページ * 制限から「スキップ」値を導出できます。たとえば、ページ 2 * 制限 10 = スキップ 20 です。この場合、スライス オペレータを使用すると問題なく動作します。「スキップ」値が配列の長さを超えている場合、結果に空の配列が返されます

于 2013-10-05T15:22:01.237 に答える