2015-09-25 53 views
4

我有一個簡單的彈簧web應用程序,它使用了mongodb。我有一個要求通過字符串搜索集合id,其中字符串應該工作正則表達式語句。我的標準創建方法看起來像這樣。Spring MongoDB按字符串搜索ID

public Criteria getSearchCriteriaQuery(String keyword, String colomnArray[]){ 
    Criteria[] criteriaList = new Criteria[colomnArray.length]; 
    for (int i=0; i<colomnArray.length; i++) { 
     criteriaList[i] = Criteria.where(colomnArray[i]).regex(keyword, "i"); 
    } 
    return this.criteria.orOperator(criteriaList); 
} 

我的域名看起來像這樣

@Document 
public class sampleDomain{ 

@Id 
private String id; 
.... 
} 

當我使用「ID」 /「_id」作爲列名,即使我發送一個有效的字符串作爲關鍵字它不返回任何東西。我試過的示例查詢如下:

id in db - 560299fe627942619bcfdc87 
keyword - 560 

是否有解決方案?在此先感謝

回答

1

這不是我想要的。 MongoDb ID不是一個String,而是一個ObjectId,它可以表示爲一個字符串,但不能作爲一個處理。 因此,在ObjectId上執行正則表達式意味着mongo必須將每個ObjectId解壓縮爲一個字符串,然後對其執行正則表達式。那會非常低效。

除非Spring-data-mongo掌握了一些東西,否則您可能需要重新考慮模型和查詢。

因爲這是MongoDB在ObjectId上執行正則表達式的奇怪用例。 你能解釋爲什麼你這樣做,爲什麼你不使用另一個領域做正則表達式?

親切的問候 克里斯

+0

這只是一個例子。我也在查詢其他領域。這是通過將字段名稱添加到列數組來完成的。唯一的問題是,這不適用於'id'字段。以這種方式尋找身份證是一項要求.. – Visahan

+0

據我所知,這是行不通的。我仍然無法看到您想要查詢隨機生成值的一部分的原因。 – DBC

+0

@DBC你看不清楚爲什麼一個普通字符串應該可以用作ID?對我來說似乎很明顯。我處於同樣的情況。我想使用簡單的字符串作爲ID和春天使非常困難,如果不是不可能的(我仍然在尋找解決方案)。但我絕對不想使用ObjectIds來存儲對象的引用。我想使用普通的字符串。 –