2015-11-04 106 views
0

我有一個mongo查詢,如下所示。Java + Mongo + Morphia - 在mongo數組中查找正則表達式

db.Course.find({ $and: [{courseCallNo: {$in : [/^ssoapicall1$/i]} }, {clientId :123456 } ] }) 

在我的java程序中,我使用jmkgreen/morphia作爲我的mongo庫。我需要使用java獲取精確匹配。 以下是我的代碼。請幫我建立這個。謝謝。

PS:我想問題是,我正在使用一個字符串數組。我需要用正則表達式創建數組。

String courseCallNoRegex = "/^"+originalCourseCallNo+"$/i";   
    List<String> courseCallNoList = new ArrayList<String>(); 
    courseCallNoList.add(courseCallNoRegex);  
    courseCallNoList.add(courseCallNoRegex);  
    List<Course> courses= getDataStore().createQuery(Course.class).field(Constants.Course.COURSE_CALL_NO).in(courseCallNoList).field(Constants.Course.CLIENT_ID).equal(clientId).asList(); 
+0

嘗試使用Java,而不是JS符號:' 「^(我?)」 + originalCourseCallNo + 「$」; ' –

回答

1
  1. 的jmkgreen叉是真的老了。我一定會嘗試進入官方的MongoDB Morphia版本,其中包括很多錯誤修正和新功能。

  2. 這個......會......很慢......
    除非收藏品真的很小,否則你很快就會感受到這種痛苦。如果你不能規範化數據(在其上調用中的.toLowerCase()),我會將數據複製到courseCallNoNormalized之類的數據中。所以你可以使用完全匹配,理想情況下與索引。

  3. 你試過以下嗎?

    Pattern regexp = 
        Pattern.compile("^" + originalCourseCallNo + "$", Pattern.CASE_INSENSITIVE); 
    mongoDatastore.find(Course.class) 
        .field(Constants.Course.CLIENT_ID).equal(clientId) 
        .filter(Constants.Course.COURSE_CALL_NO, regexp).asList(); 
    
+0

請注意,您可能需要使用'Pattern.quote(originalCourseCallNo)'''在'originalCourseCallNo'中轉義特殊符號。 – Yeti