本文介紹了Spring data MongoDB:在多個(gè)字段上搜索Like的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我有一個(gè)MongoDB集合,其中包含帶有兩個(gè)字段的User對(duì)象:FirstName和LastName。我需要一個(gè)只接受一個(gè)字符串(表示用戶(hù)全名)的查詢(xún)來(lái)進(jìn)行findLike搜索。
問(wèn)題與此相同question但我不知道如何使用MongoTemplate或@Query批注在Spring數(shù)據(jù)中轉(zhuǎn)換MongoDB存儲(chǔ)庫(kù)查詢(xún)
編輯:
使用項(xiàng)目操作員,我必須指定我想要包括在階段的所有領(lǐng)域。更好的解決方案可能是使用AddFields
運(yùn)算符:
我發(fā)現(xiàn)的一個(gè)類(lèi)似的問(wèn)題是:
https://stackoverflow.com/a/40812293/6545142
如何將$AddFields
運(yùn)算符與MongoTemplate一起使用?
推薦答案
您可以使用$expr(3.6mongo版本運(yùn)算符)在常規(guī)查詢(xún)中僅使用精確匹配的聚合函數(shù)。
Spring@Query
代碼
@Query("{$expr:{$eq:[{$concat:["$Firstname","$Lastname"]}, ?0]}}")
ReturnType MethodName(ArgType arg);
對(duì)于Find Like搜索或精確搜索,您必須在較低版本中使用通過(guò)Mongo模板聚合。
AggregationOperation project = Aggregation.project().and(StringOperators.Concat.valueOf("Firstname").concatValueOf("Lastname")).as("newField");
For Like Matches
AggregationOperation match = Aggregation.match(Criteria.where("newField").regex(val));
完全匹配
AggregationOperation match = Aggregation.match(Criteria.where("newField").is(val));
代碼的其余部分
Aggregation aggregation = Aggregation.newAggregation(project, match);
List<BasicDBObject> basicDBObject = mongoTemplate.aggregate(aggregation, colname, BasicDBObject.class).getMappedResults();
這篇關(guān)于Spring data MongoDB:在多個(gè)字段上搜索Like的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,