Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 특정 문자로 끝나는 값을 가진 문서를 검색하는 방법

MongoDB에서 필드 값이 특정 문자로 끝나는 문서를 조회하려면 $regex 연산자와 정규식 앵커인 $(달러 기호)를 함께 사용하면 됩니다. 정규식 맨 끝에 붙는 $는 "문자열의 마지막"을 의미하기 때문에, 이를 활용하면 원하는 조건에 맞는 문서만 간단하게 필터링할 수 있습니다.

기본 문법

특정 문자로 끝나는 값을 가진 문서를 조회하는 기본 문법은 다음과 같습니다.

db.yourCollectionName.find({yourFieldName: {$regex: "yourEndingCharacter$"}}).pretty();

실습 예제

1. 샘플 컬렉션 생성

먼저 테스트에 사용할 컬렉션을 만들고 문서를 하나씩 삽입해 보겠습니다.

> db.retrieveDocumentsWithEndsWithParticularCharacterDemo.insertOne({"StudentName":"Adam","StudentAge":25,"StudentCountryName":"LAOS"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9c45b32d66697741252456")
}
> db.retrieveDocumentsWithEndsWithParticularCharacterDemo.insertOne({"StudentName":"Sam","StudentAge":24,"StudentCountryName":"ANGOLA"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9c45c02d66697741252457")
}
> db.retrieveDocumentsWithEndsWithParticularCharacterDemo.insertOne({"StudentName":"Robert","StudentAge":21,"StudentCountryName":"AUS"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9c45cb2d66697741252458")
}
> db.retrieveDocumentsWithEndsWithParticularCharacterDemo.insertOne({"StudentName":"Chris","StudentAge":20,"StudentCountryName":"UK"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9c45d92d66697741252459")
}
> db.retrieveDocumentsWithEndsWithParticularCharacterDemo.insertOne({"StudentName":"Larry","StudentAge":23,"StudentCountryName":"US"});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5c9c45eb2d6669774125245a")
}

2. 전체 문서 확인

find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 출력합니다.

> db.retrieveDocumentsWithEndsWithParticularCharacterDemo.find().pretty();

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : ObjectId("5c9c45b32d66697741252456"),
   "StudentName" : "Adam",
   "StudentAge" : 25,
   "StudentCountryName" : "LAOS"
}
{
   "_id" : ObjectId("5c9c45c02d66697741252457"),
   "StudentName" : "Sam",
   "StudentAge" : 24,
   "StudentCountryName" : "ANGOLA"
}
{
   "_id" : ObjectId("5c9c45cb2d66697741252458"),
   "StudentName" : "Robert",
   "StudentAge" : 21,
   "StudentCountryName" : "AUS"
}
{
   "_id" : ObjectId("5c9c45d92d66697741252459"),
   "StudentName" : "Chris",
   "StudentAge" : 20,
   "StudentCountryName" : "UK"
}
{
   "_id" : ObjectId("5c9c45eb2d6669774125245a"),
   "StudentName" : "Larry",
   "StudentAge" : 23,
   "StudentCountryName" : "US"
}

3. 특정 문자로 끝나는 문서 검색

이제 본격적으로 StudentCountryName 필드의 값이 문자 "S"로 끝나는 문서만 조회해 보겠습니다. 정규식 패턴으로 S$를 지정하면 됩니다.

> db.retrieveDocumentsWithEndsWithParticularCharacterDemo.find({StudentCountryName: {$regex: "S$"}}).pretty();

실행 결과, 국가명이 "S"로 끝나는 세 개의 문서만 반환된 것을 확인할 수 있습니다.

{
   "_id" : ObjectId("5c9c45b32d66697741252456"),
   "StudentName" : "Adam",
   "StudentAge" : 25,
   "StudentCountryName" : "LAOS"
}
{
   "_id" : ObjectId("5c9c45cb2d66697741252458"),
   "StudentName" : "Robert",
   "StudentAge" : 21,
   "StudentCountryName" : "AUS"
}
{
   "_id" : ObjectId("5c9c45eb2d6669774125245a"),
   "StudentName" : "Larry",
   "StudentAge" : 23,
   "StudentCountryName" : "US"
}

참고: 대소문자 구분 없이 검색하기

기본적으로 $regex는 대소문자를 구분합니다. 만약 대소문자와 관계없이 검색하고 싶다면 $optionsi 옵션을 추가하면 됩니다.

db.retrieveDocumentsWithEndsWithParticularCharacterDemo.find({StudentCountryName: {$regex: "s$", $options: "i"}}).pretty();

이렇게 하면 "LAOS", "AUS", "US"처럼 소문자 "s"로 끝나는 값도 함께 검색됩니다.