我有一个mongo集合,其中包含以下对象:
[
{
"_id" : "a2d",
"entityType" : "Location",
"type" : "STRING",
},
{
"_id" : "a1_order",
"entityType" : "Order",
"type" : "STRING",
}
]
尝试将_entityType
附加到所有文档的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" ) );
答案 0 :(得分: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);
答案 1 :(得分:1)
你真的想在这里使用“反向正则表达式”,因为你需要使用文档中的数据才能匹配另一个字段。
目前,您只能使用$where
对MongoDB执行此操作,该BasicQuery
会评估服务器上的JavaScript。因此,对于spring mongo,您需要使用refer,因此我们可以从BasicDBObject
和Code
灵长来源构建:
BasicDBObject basicDBObject = new BasicDBObject("$where",
new Code("!RegExp('_' + this.entityType + '$','i').test(this.id)"));
BasicQuery query = new BasicQuery(basicDBObject);
这将测试文档中的"id"
字段,以查看它是否与“字符串末尾”entityType
中的值匹配,而不考虑“大小写”。 !
是Not
条件,因此逻辑的“反向”应用于“不匹配”,其中字段实际上以此方式结束。