Docs Menu
Docs Home
/ / /
Laravel MongoDB
/

읽기 작업

이 페이지의 내용

  • 개요
  • 시작하기 전에
  • 쿼리와 일치하는 문서 조회
  • 배열 필드 요소 일치
  • 컬렉션의 모든 문서 조회
  • Atlas Search 텍스트 필드
  • 동작 수정
  • 결과 건너뛰기 및 제한
  • 쿼리 결과 정렬
  • 첫 번째 결과 반환

이 가이드에서는 Laravel MongoDB를 사용하여 MongoDB collection에서 찾기 작업 을 수행하는 방법을 배울 수 있습니다. 찾기 작업을 사용하면 지정한 기준에 따라 문서를 검색할 수 있습니다.

이 가이드에서는 다음 작업을 수행하는 방법을 보여줍니다.

  • 쿼리와 일치하는 문서 조회

  • 컬렉션의 모든 문서 조회

  • Atlas Search 텍스트 필드

  • 찾기 작업 동작 수정

이 가이드 의 코드 예제를 실행 하려면 빠른 시작 튜토리얼을 완료하세요. 이 튜토리얼에서는 샘플 데이터로 MongoDB Atlas 인스턴스 를 설정하고 Laravel 웹 애플리케이션 에서 다음 파일을 만드는 방법에 대한 지침을 제공합니다.

  • Movie.php 파일에 movies collection의 문서를 나타내는 Movie 모델이 포함되어 있습니다.

  • MovieController.php 파일에 데이터베이스 작업을 실행하는 show() 함수가 포함되어 있습니다.

  • browse_movies.blade.php 파일에는 데이터베이스 작업의 결과를 표시하는 HTML 코드가 포함되어 있습니다.

다음 섹션에서는 Laravel 애플리케이션에서 파일을 편집하여 찾기 작업 코드 예제를 실행하고 예상 출력을 보는 방법을 설명합니다.

라라벨의 Eloquent 객체 관계형 매퍼(ORM)를 사용하여 MongoDB 컬렉션을 나타내는 모델을 만들고 모델에 메서드를 연결하여 쿼리 기준을 지정할 수 있습니다.

설정하다 에 일치하는 문서를 조회하려면 컬렉션의 해당 조회 모델에서 where() 메서드를 호출한 다음 메서드에 쿼리 필터하다 를 전달합니다.

쿼리 필터는 필드 값 요구 사항을 지정하고 이러한 요구 사항을 충족하는 문서만 반환하도록 찾기 작업에 지시합니다.

다음 where() 메서드 호출 중 하나를 사용하여 쿼리를 작성할 수 있습니다.

  • where('<field name>', <value>) 대상 필드에 정확히 지정된 값이 있는 문서와 일치하는 쿼리를 작성합니다.

  • where('<field name>', '<comparison operator>', <value>) 대상 필드의 값이 비교 기준을 충족하는 문서와 일치하는 쿼리를 작성합니다.

찾기 작업에 여러 기준 세트를 적용하려면 일련의 where() 메서드를 함께 연결할 수 있습니다.

where() 메서드를 사용하여 쿼리 를 작성한 후 get() 메서드를 연결하여 쿼리 결과를 조회 합니다.

이 예시에서는 Movie Eloquent 모델에서 두 개의 where() 메서드를 호출하여 다음 기준을 충족하는 문서를 조회합니다.

  • year 필드의 값은 다음과 같습니다. 2010

  • imdb.rating 중첩된 필드에 다음보다 큰 값이 있습니다. 8.5

쿼리를 지정하려면 다음 구문을 사용합니다.

$movies = Movie::where('year', 2010)
->where('imdb.rating', '>', 8.5)
->get();

browse_movies 뷰에서 쿼리 결과를 보려면 MovieController.php 파일 에서 show() 함수를 다음 코드와 유사하게 편집합니다.

class MovieController
{
public function show()
{
$movies = Movie::where('year', 2010)
->where('imdb.rating', '>', 8.5)
->get();
return view('browse_movies', [
'movies' => $movies
]);
}
}
Title: Inception
Year: 2010
Runtime: 148
IMDB Rating: 8.8
IMDB Votes: 1294646
Plot: A thief who steals corporate secrets through use of dream-sharing
technology is given the inverse task of planting an idea into the mind of a CEO.
Title: Senna
Year: 2010
Runtime: 106
IMDB Rating: 8.6
IMDB Votes: 41904
Plot: A documentary on Brazilian Formula One racing driver Ayrton Senna, who won the
F1 world championship three times before his death at age 34.

Eloquent ORM 대신 Laravel 쿼리 빌더를 사용하여 쿼리하는 방법을 알아보려면 쿼리 빌더 페이지를 참조하세요.

문서를 검색할 때 배열 필드 요소와 일치하도록 쿼리 필터하다 를 지정할 수 있습니다. 문서에 배열 필드 가 포함된 경우 값에 지정된 배열 요소가 전부 또는 일부 포함되어 있는지 여부에 따라 문서를 일치시킬 수 있습니다.

다음 where() 메서드 호출 중 하나를 사용하여 배열 필드 에 대한 쿼리 를 빌드 수 있습니다.

  • where('<array field>', <array>) 배열 필드 값이 정확히 지정된 배열 인 문서와 일치하는 쿼리 를 작성합니다.

  • where('<array field>', 'in', <array>) 배열 필드 값에 지정된 배열 요소가 하나 이상 포함된 문서와 일치하는 쿼리 를 작성합니다.

where() 메서드를 사용하여 쿼리 를 작성한 후 get() 메서드를 연결하여 쿼리 결과를 조회 합니다.

다음 Exact Array MatchElement Match 탭에서 선택하여 각 패턴 에 대한 쿼리 구문을 확인합니다.

이 예시 에서는 countries 배열 이 정확히 ['Indonesia', 'Canada'] 인 문서를 검색합니다.

$movies = Movie::where('countries', ['Indonesia', 'Canada'])
->get();

이 예시 에서는 countries 배열 에 ['Canada', 'Egypt'] 배열 의 값 중 하나가 포함된 문서를 조회합니다.

$movies = Movie::where('countries', 'in', ['Canada', 'Egypt'])
->get();

Eloquent ORM 대신 Laravel 쿼리 빌더를 사용하여 배열 필드를 쿼리 하는 방법을 학습 보려면 쿼리 빌더 가이드 의 배열 요소 일치 예제 섹션을 참조하세요.

쿼리 필터를 생략하여 컬렉션의 모든 문서를 조회할 수 있습니다. 문서를 반환하려면 collection을 나타내는 Eloquent 모델에서 get() 메서드를 호출합니다. 또는 get() 메서드의 별칭 all() 을(를) 사용하여 동일한 작업을 수행할 수 있습니다.

다음 구문을 사용하여 모든 문서와 일치하는 찾기 작업을 실행합니다.

$movies = Movie::get();

경고

Atlas 샘플 데이터 세트의 movies 컬렉션에 다량의 데이터가 포함되어 있습니다. 이 collection의 모든 문서를 검색하고 표시하면 웹 애플리케이션 시간이 초과될 수 있습니다.

이 문제를 방지하려면 take() 메서드를 사용하여 문서 제한을 지정합니다. take() 에 대한 자세한 내용은 이 가이드의 동작 수정 섹션을 참조하세요.

텍스트 Atlas Search는 텍스트 인덱스 필드에 용어 또는 구문 이 포함된 문서를 검색합니다. 용어는 공백 문자를 제외한 일련의 문자입니다. 구는 임의의 수의 공백 문자가 있는 일련의 용어입니다.

참고

텍스트 Atlas Search를 수행하려면 먼저 텍스트 값 필드에 텍스트 인덱스 를 만들어야 합니다. 인덱스 생성에 대해 자세히 알아보려면 스키마 빌더 가이드의 인덱스 관리 섹션을 참조하세요.

where() 메서드에 전달하는 쿼리 필터의 $text 연산자 뒤에 $search 필드를 사용하여 텍스트 Atlas Search를 수행할 수 있습니다. $text 연산자는 텍스트 인덱스 필드에 대해 텍스트 Atlas Search를 수행합니다. $search 필드는 Atlas Search에서 사용할 텍스트를 지정합니다.

where() 메서드를 사용하여 쿼리 를 작성한 후 get() 메서드를 연결하여 쿼리 결과를 조회 합니다.

이 예제에서는 Movie Eloquent 모델에서 where() 메서드를 호출하여 plot 필드에 "love story" 구문이 포함된 문서를 조회합니다. 이 텍스트 Atlas Search를 수행하려면 컬렉션에 plot 필드에 텍스트 인덱스가 있어야 합니다.

쿼리를 지정하려면 다음 구문을 사용합니다.

$movies = Movie::where('$text', ['$search' => '"love story"'])
->get();

browse_movies 뷰에서 쿼리 결과를 보려면 MovieController.php 파일 에서 show() 함수를 다음 코드와 유사하게 편집합니다.

class MovieController
{
public function show()
{
$movies = Movie::where('$text', ['$search' => '"love story"'])
->get();
return view('browse_movies', [
'movies' => $movies
]);
}
}
Title: Cafè de Flore
Year: 2011
Runtime: 120
IMDB Rating: 7.4
IMDB Votes: 9663
Plot: A love story between a man and woman ...
Title: Paheli
Year: 2005
Runtime: 140
IMDB Rating: 6.7
IMDB Votes: 8909
Plot: A folk tale - supernatural love story about a ghost ...
Title: Por un puèado de besos
Year: 2014
Runtime: 98
IMDB Rating: 6.1
IMDB Votes: 223
Plot: A girl. A boy. A love story ...
...

텍스트 Atlas Search는 결과가 string 쿼리 필터의 과 얼마나 일치하는지를 나타내는 숫자 텍스트 점수 를 할당합니다. orderBy() 메서드를 사용하여 textScore 메타데이터 필드를 정렬하면 관련성별로 결과를 정렬할 수 있습니다. $meta 연산자를 사용하여 이 메타데이터에 액세스할 수 있습니다.

$movies = Movie::where('$text', ['$search' => '"love story"'])
->orderBy('score', ['$meta' => 'textScore'])
->get();

orderBy() 메서드에 대해 자세히 알아보려면 이 가이드의 쿼리 결과 정렬 섹션을 참조하세요.

더 많은 메서드를 where() 에 연결하여 찾기 작업의 결과를 수정할 수 있습니다.

다음 섹션에서는 where() 메서드의 동작을 수정하는 방법을 보여줍니다.

  • 건너뛰기 및 결과 제한skip() 메서드를 사용하여 건너뛸 문서 수를 설정하고 take() 메서드를 사용하여 반환할 총 문서 수를 설정합니다.

  • 쿼리 결과 정렬 orderBy() 메서드를 사용하여 필드 값에 따라 지정된 순서로 쿼리 결과를 반환합니다.

  • 첫 번째 결과 반환 first() 메서드를 사용하여 쿼리 필터와 일치하는 첫 번째 문서를 반환합니다.

이 예제에서는 year 값이 1999 인 문서를 쿼리합니다. 이 작업은 처음 2 일치하는 문서를 건너뛰고 총 3 개의 문서를 출력합니다.

쿼리를 지정하려면 다음 구문을 사용합니다.

$movies = Movie::where('year', 1999)
->skip(2)
->take(3)
->get();

browse_movies 뷰에서 쿼리 결과를 보려면 MovieController.php 파일 에서 show() 함수를 다음 코드와 유사하게 편집합니다.

class MovieController
{
public function show()
{
$movies = Movie::where('year', 1999)
->skip(2)
->take(3)
->get();
return view('browse_movies', [
'movies' => $movies
]);
}
}
Title: Three Kings
Year: 1999
Runtime: 114
IMDB Rating: 7.2
IMDB Votes: 130677
Plot: In the aftermath of the Persian Gulf War, 4 soldiers set out to steal gold
that was stolen from Kuwait, but they discover people who desperately need their help.
Title: Toy Story 2
Year: 1999
Runtime: 92
IMDB Rating: 7.9
IMDB Votes: 346655
Plot: When Woody is stolen by a toy collector, Buzz and his friends vow to rescue him,
but Woody finds the idea of immortality in a museum tempting.
Title: Beowulf
Year: 1999
Runtime: 95
IMDB Rating: 4
IMDB Votes: 9296
Plot: A sci-fi update of the famous 6th Century poem. In a besieged land, Beowulf must
battle against the hideous creature Grendel and his vengeance seeking mother.

지정된 필드의 값을 기준으로 쿼리 결과의 순서를 지정하려면 where() 메서드를 사용한 다음 orderBy() 메서드를 사용합니다.

결과에 오름차순 또는 내림차순 정렬 방향을 설정할 수 있습니다. 기본적으로 orderBy() 메서드는 제공된 필드 이름에 오름차순 정렬을 설정하지만 "asc" 을 두 번째 매개 변수로 전달하여 오름차순 정렬을 명시적으로 지정할 수 있습니다. 내림차순 정렬을 지정하려면 "desc" 를 두 번째 매개변수로 전달합니다.

문서의 특정 필드에 중복된 값이 포함된 경우 정렬할 필드를 더 지정하여 타이를 처리할 수 있습니다. 이렇게 하면 다른 필드에 고유한 값이 포함된 경우 일관된 결과가 보장됩니다.

이 예제에서는 countries 필드 값에 "Indonesia" 가 포함된 문서를 쿼리하고 먼저 year 필드에서 오름차순 정렬을 수행한 다음 title 필드에서 내림차순 정렬로 결과를 정렬합니다.

쿼리를 지정하려면 다음 구문을 사용합니다.

$movies = Movie::where('countries', 'Indonesia')
->orderBy('year')
->orderBy('title', 'desc')
->get();

browse_movies 뷰에서 쿼리 결과를 보려면 MovieController.php 파일 에서 show() 함수를 다음 코드와 유사하게 편집합니다.

class MovieController
{
public function show()
{
$movies = Movie::where('countries', 'Indonesia')
->orderBy('year')
->orderBy('title', 'desc')
->get();
return view('browse_movies', [
'movies' => $movies
]);
}
}
Title: Joni's Promise
Year: 2005
Runtime: 83
IMDB Rating: 7.6
IMDB Votes: 702
Plot: A film delivery man promises ...
Title: Gie
Year: 2005
Runtime: 147
IMDB Rating: 7.5
IMDB Votes: 470
Plot: Soe Hok Gie is an activist who lived in the sixties ...
Title: Requiem from Java
Year: 2006
Runtime: 120
IMDB Rating: 6.6
IMDB Votes: 316
Plot: Setyo (Martinus Miroto) and Siti (Artika Sari Dewi)
are young married couple ...
...

정렬에 대해 자세히 알아보려면 다음 리소스를 참조하세요.

기준에 일치하는 첫 번째 문서를 조회하려면 where() 메서드를 사용한 후 first() 메서드를 사용합니다.

고유한 값에 대해 쿼리할 때 일관된 결과를 얻으려면 orderBy() 메서드를 first() 에 연결합니다. orderBy() 메서드를 생략하는 경우 MongoDB는 문서의 저장 순서 또는 collection에 표시되는 순서에 따라 일치하는 문서를 반환합니다.

이 예제에서는 runtime 필드의 값이 30 인 문서를 쿼리하고 _id 필드의 값에 따라 첫 번째로 일치하는 문서를 반환합니다.

쿼리를 지정하려면 다음 구문을 사용합니다.

$movie = Movie::where('runtime', 30)
->orderBy('_id')
->first();

browse_movies 뷰에서 쿼리 결과를 보려면 MovieController.php 파일 에서 show() 함수를 다음 코드와 유사하게 편집합니다.

class MovieController
{
public function show()
{
$movie = Movie::where('runtime', 30)
->orderBy('_id')
->first();
return view('browse_movies', [
'movies' => $movie
]);
}
}
Title: Statues also Die
Year: 1953
Runtime: 30
IMDB Rating: 7.6
IMDB Votes: 620
Plot: A documentary of black art.

orderBy() 메서드에 대해 자세히 알아보려면 이 가이드의 쿼리 결과 정렬 섹션을 참조하세요.

돌아가기

데이터베이스 & collection