2016-03-08 51 views
0

環境:MongoDB的3.2,嗎啡1.1.0具有嗎啡查詢條件的多個過濾器Mongo的數據庫

因此,可以說我有員工的收集和僱員實體有幾個領域。我需要執行一些操作,例如應用多個過濾器(有條件),併爲每個請求返回一批10條記錄。

pesudocode如下。

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

在我EmployeeFilterRequest i中的請求參數攜帶於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** *****/ 
} 
} 

SO如所解釋..我想在執行條件濾波多個領域。即使批量大小爲10,我也會收集完整的記錄。

如何解決這個???

問候 Punith

+1

我認爲你是錯把'.batchSize()''爲.limit()',這是兩個不同的東西。 –

+0

謝謝@BlakesSeven !!這解決了:) –

回答

1

布雷克是正確的。您想要使用limit()而不是batchSize()。批量大小隻影響每次到達服務器的文檔數量。這在拉取大量非常大的文檔時非常有用,但不會影響查詢獲取的文檔總數。

作爲一個側面說明,你應該使用asList()小心,因爲它會創建了該查詢返回的每個文檔的對象,並可能耗盡你的虛擬機的堆。使用fetch()可讓您逐步補充文檔,因爲您需要每個文檔。你可能實際上需要他們所有的一個列表和大小爲10這可能是好的。當您處理其他查詢時,請記住這一點。

+0

謝謝@evanchooly!這解決了:)。我會照顧給出的建議 –

相關問題