2017-07-04 54 views
1

我有一個蒙戈集合與像這些對象:反向正則表達式的選擇與Spring的MongoDB

[ 
{ 
    "_id" : "a2d", 
    "entityType" : "Location", 
    "type" : "STRING", 
}, 
{ 
    "_id" : "a1_order", 
    "entityType" : "Order", 
    "type" : "STRING", 
} 
] 

試圖追加_entityType所有文檔的id它不存在在年底ID的ID(第一個對象在上述情況下)。

在Spring中使用mongo,但我已經堅持第一步,要獲取id中沒有entityType的所有對象。

關於這樣的事情,用正則表達式的思考,但是我不知道應該如何看起來像:

Query query = new Query(); 
query.addCriteria(Criteria.where("id").regex("here i need the entity type of the current document")); 

回答

1

你真正想要「逆正則表達式」在這裏,你需要使用的數據該文件爲了匹配另一個領域。

目前,您只能通過使用$where來對MongoDB執行此操作,該操作將評估服務器上的JavaScript。所以春天蒙戈,你需要的BasicQuery相反,所以我們可以從BasicDBObjectCode primatives構建:

BasicDBObject basicDBObject = new BasicDBObject("$where", 
      new Code("!RegExp('_' + this.entityType + '$','i').test(this.id)")); 

    BasicQuery query = new BasicQuery(basicDBObject); 

這將測試文檔中的"id"場,看它是否在「結束從entityType值相匹配的字符串「,而不考慮」情況「。 !Not條件,所以邏輯的「反向」應用於「不匹配」,其中字段實際上以這種方式結束。

2

你可以用'^'('開始於'正則表達式)構建你的正則表達式。

所以你需要誰在所有文件指向和檢查該過濾器

List<Document> result = new ArrayList<Document>(); 
    StringBuilder idPrefix = new StringBuilder(); 
    idPrefix.append("^"); 
    idPrefix.append(idCode); 
    idPrefix.append("_"); 
    List<Bson> filters = new ArrayList<Bson>(); 
    filters.add(Filters.regex("_id", keyPrefix.toString())); 
    for (Document d : yourCollections.find(Filters.and(filters))) 
     list.add(d); 
功能