0

環境:MongoDb 3.2、Morphia 1.1.0

したがって、従業員のコレクションがあり、従業員エンティティにはいくつかのフィールドがあるとしましょう。複数のフィルター(条件付き)を適用し、要求ごとに 10 レコードのバッチを返すようなことをする必要があります。

以下のように疑似コード。

@Entity("Employee")
Employee{
 String firstname,
 String lastName,
 int salary,
 int deptCode,
 String nationality
}

そして、私EmployeeFilterRequestは要求パラメーターをdaoに運びます

EmployeeFilterRequest{
 int salaryLessThen
 int deptCode,
 String nationality..
}

疑似クラス

class EmployeeDao{

public List<Employee> returnList;

public getFilteredResponse(EmployeeFilterRequest request){
   DataStore ds = getTheDatastore();

   Query<Employee> query = ds.createQuery(Emploee.class).disableValidation();

   //conditional request #1
   if(request.filterBySalary){
     query.filter("salary >", request.salary);
   }

   //conditional request #2
   if(request.filterBydeptCode){
     query.filter("deptCode ==", request.deptCode);
   }

   //conditional request #3
   if(request.filterByNationality){
     query.filter("nationality ==", request.nationality);
   }

   returnList = query.batchSize(10).asList();

/******* **THIS IS RETURNING ME ALL THE RECORDS IN THE COLLECTION, EXPECTED ONLY 10** *****/
 }
}

上記のコードで説明したように、複数のフィールドで条件付きフィルタリングを実行したいと考えています。また、batchSize が 10 であっても、コレクション内の完全なレコードを取得しています。

これを解決する方法???

よろしくプニス

4

1 に答える 1

1

ブレイクスは正しい。limit()ではなく使用したいbatchSize()。バッチ サイズは、サーバーへの各トリップで返されるドキュメントの数にのみ影響します。これは、大量の非常に大きなドキュメントを取得する場合に役立ちますが、クエリによってフェッチされるドキュメントの総数には影響しません。

asList()補足として、クエリによって返されるすべてのドキュメントからオブジェクトを作成し、VM のヒープを使い果たす可能性があるため、注意して使用する必要があります。を使用fetch()すると、必要に応じてドキュメントを段階的にハイドレートできます。実際にはそれらすべてをリストとして必要とする場合があり、サイズが 10 の場合はおそらく問題ありません。これは、他のクエリを使用するときに覚えておくべきことです。

于 2016-03-08T13:41:07.623 に答える