[MONGODB] MongoDB를 및 C # : 대소 문자를 구분 검색
MONGODBMongoDB를 및 C # : 대소 문자를 구분 검색
나는 MongoDB를하고 MongoDB를위한 C # 드라이버를 사용하고 있습니다.
나는 최근에 MongoDB의 모든 쿼리는 대소 문자를 구분 것을 발견했다. 어떻게 대소 문자 구분 검색을 할 수 있습니까?
나는이 작업을 수행하는 방법을 발견 :
Query.Matches(
"FirstName",
BsonRegularExpression.Create(new Regex(searchKey,RegexOptions.IgnoreCase)));
해결법
-
==============================
1.이를위한 가장 간단하고 안전한 방법은 Linq에를 사용하고 있습니다 :
이를위한 가장 간단하고 안전한 방법은 Linq에를 사용하고 있습니다 :
var names = namesCollection.AsQueryable().Where(name => name.FirstName.ToLower().Contains("hamster"));
튜토리얼 ToLower는에서 설명하고있는 바와 같이, ToLowerInvariant,의 ToUpper 및 ToUpperInvariant 모두가 대소 문자를 구분 방법으로 일치를 수행합니다. 포함 또는 StartsWith처럼 당신이 지원되는 모든 문자열 방법을 사용할 수 있습니다 후.
이 예는 생성합니다 :
{ "FirstName" : /hamster/is }
는 I 옵션은 경우를 구분한다.
-
==============================
2.난 그냥 다른 제안들보다이 훨씬 간단을 구현했습니다. 이 질문의 나이에,이 기능은 한 번에 사용할 수 없었을 수 있습니다 때문에 그러나 나는 알고 있습니다.
난 그냥 다른 제안들보다이 훨씬 간단을 구현했습니다. 이 질문의 나이에,이 기능은 한 번에 사용할 수 없었을 수 있습니다 때문에 그러나 나는 알고 있습니다.
소문자 구분을 전달하기 위해 Bson 정규 표현식 생성자의 옵션을 사용합니다. 난 그냥 소스 코드를 살펴했고 그 '내가'당신이 필요로하는 모든 것입니다 발견했다. 예를 들어.
var regexFilter = Regex.Escape(filter); var bsonRegex = new BsonRegularExpression(regexFilter, "i"); Query.Matches("MyField", bsonRegex);
당신은 검색을 위해 두 번 기록을 유지 할 필요가 없습니다.
-
==============================
3.이 같은 것을 사용하려고 :
이 같은 것을 사용하려고 :
Query.Matches("FieldName", BsonRegularExpression.Create(new Regex(searchKey, RegexOptions.IgnoreCase)))
-
==============================
4.당신은 아마 모두 소문자로 다시 그것의 진정한 가치와 함께 한 번, 두 번 필드를 저장하고해야합니다. 그런 다음 대소 문자를 구분 검색을위한 소문자 버전을 조회 할 수 있습니다 (또한 쿼리 문자열을 소문자로 잊지 마세요).
당신은 아마 모두 소문자로 다시 그것의 진정한 가치와 함께 한 번, 두 번 필드를 저장하고해야합니다. 그런 다음 대소 문자를 구분 검색을위한 소문자 버전을 조회 할 수 있습니다 (또한 쿼리 문자열을 소문자로 잊지 마세요).
이 방법은 작업 (또는 필요) 많은 데이터베이스 시스템을 위해, 그것은 (적어도 접두사 또는 정확한 매칭을위한) 정규 표현식 기반 기술보다 더 수행해야합니다.
-
==============================
5.i3arnon 대답, 당신은 대소 문자를 구분 비교 / 검색을 수행 Queryable에서 사용할 수 있습니다. 내가 뭘 발견하는 것은 지원되지 않기 때문에 내가, string.Equals () 메소드를 사용하지 수 있었다. 당신은 비교를해야하는 경우, 불행하게도 꽤 많은 시간 동안, 해결책을 고민 저를 유지하는 적합하지 않을 것이다) (포함합니다.
i3arnon 대답, 당신은 대소 문자를 구분 비교 / 검색을 수행 Queryable에서 사용할 수 있습니다. 내가 뭘 발견하는 것은 지원되지 않기 때문에 내가, string.Equals () 메소드를 사용하지 수 있었다. 당신은 비교를해야하는 경우, 불행하게도 꽤 많은 시간 동안, 해결책을 고민 저를 유지하는 적합하지 않을 것이다) (포함합니다.
문자열 비교를하고 싶은 누군가를 위해, 단순히 .Equals 대신 == ()를 사용합니다.
암호:
var names = namesCollection.AsQueryable().Where(name => name.FirstName.ToLower() == name.ToLower());
-
==============================
6.경우 다른 사람에 애드온 유창 - 몽고를 사용하여, 궁금, 당신은 그런 쿼리에 Linq에 사용할 수 있습니다 :
경우 다른 사람에 애드온 유창 - 몽고를 사용하여, 궁금, 당신은 그런 쿼리에 Linq에 사용할 수 있습니다 :
public User FindByEmail(Email email) { return session.GetCollection<User>().AsQueryable() .Where(u => u.EmailAddress.ToLower() == email.Address.ToLower()).FirstOrDefault(); }
어떤 올바른 JS-쿼리의 결과. 불행하게도, String.Equals ()는 아직 지원되지 않습니다.
-
==============================
7.또한 MongoDB를 필터에 내장 된있어 사용할 수 있습니다. 그것은 몽고의 몇 가지 방법을 사용하여보다 쉽게 할 수 있습니다.
또한 MongoDB를 필터에 내장 된있어 사용할 수 있습니다. 그것은 몽고의 몇 가지 방법을 사용하여보다 쉽게 할 수 있습니다.
var filter = Builders<Model>.Filter.Where(p => p.PropertyName.ToLower().Contains(s.ToLower())); var list = collection.Find(filter).Sort(mySort).ToList();
-
==============================
8.아래와 같이 할 수있는 방법은 MongoDB.Bson.BsonJavaScript 클래스를 사용하는 것입니다
아래와 같이 할 수있는 방법은 MongoDB.Bson.BsonJavaScript 클래스를 사용하는 것입니다
store.FindAs<Property>(Query.Where(BsonJavaScript.Create(string.Format("this.City.toLowerCase().indexOf('{0}') >= 0", filter.City.ToLower()))));
-
==============================
9.MongoDB를 들어 3.4 이상 권장되는 방법은 인덱스를 사용하는 것입니다. https://jira.mongodb.org/browse/DOCS-11105?focusedCommentId=1859745&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-1859745 참조
MongoDB를 들어 3.4 이상 권장되는 방법은 인덱스를 사용하는 것입니다. https://jira.mongodb.org/browse/DOCS-11105?focusedCommentId=1859745&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-1859745 참조
나는 성공적 사례를 구분하여 함께 검색하고 있습니다 : 및 자세한 내용은 1 또는 2를 참조 https://docs.mongodb.com/manual/core/index-case-insensitive/의 힘 : 1. ( "EN"예컨대) 로케일에 대한 정렬과 인덱스 만들기
예로서:
사례를 구분하기위한 강도 1 또는 2와 조합 만들기
private readonly Collation _caseInsensitiveCollation = new Collation("en", strength: CollationStrength.Primary);
인덱스를 만듭니다. 내 경우 I 지수 여러 분야에서 :
private void CreateIndex() { var indexOptions = new CreateIndexOptions {Collation = _caseInsensitiveCollation}; var indexDefinition = Builders<MyDto>.IndexKeys.Combine( Builders<MyDto>.IndexKeys.Ascending(x => x.Foo), Builders<MyDto>.IndexKeys.Ascending(x => x.Bar)); _myCollection.Indexes.CreateOne(indexDefinition, indexOptions); }
메이크업을 조회 할 때 반드시 동일한 데이터 정렬을 사용합니다 :
public IEnumerable<MyDto> GetItems() { var anyFilter = GetQueryFilter(); var anySort = sortBuilder.Descending(x => x.StartsOn); var findOptions = new FindOptions {Collation = _caseInsensitiveCollation}; var result = _salesFeeRules .Find(anyFilter, findOptions) .Sort(anySort) .ToList(); return result; }
-
==============================
10.이것은 정확한 텍스트 검색 및 대소 문자를 구별 (링크 참조).
이것은 정확한 텍스트 검색 및 대소 문자를 구별 (링크 참조).
{ “FieldName” : /^keywordHere$/i }
from https://stackoverflow.com/questions/4458950/mongodb-and-c-case-insensitive-search by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽고 개체를 사용하여 몽구스 빈 등의 설정 필드 (0) | 2019.12.23 |
---|---|
[MONGODB] MongoNetworkError : 먼저 연결에 : [27017 로컬 호스트] 서버에 연결하는 데 실패 [MongoNetworkError : 연결 ECONNREFUSED 127.0.0.1:27017] (0) | 2019.12.23 |
[MONGODB] 직접 자바 스크립트를 통해 액세스 MongoDB를 (0) | 2019.12.23 |
[MONGODB] 보관 UTC와 몽고에 현지 날짜 (0) | 2019.12.23 |
[MONGODB] 어떻게 MongoDB를 하나 개의 컬렉션 자신의 문서를 주문 하는가? [복제] (0) | 2019.12.23 |