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); 
功能