Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

geoWithin

이 페이지의 내용

  • 정의
  • 구문
  • 옵션
  • 예시
  • box 예시
  • circle 예시
  • geometry 예시
geoWithin

geoWithin 연산자는 주어진 지오메트리 내의 지리적 점에 대한 쿼리를 지원합니다. 인덱스 정의에서 indexShapes 값이 true인 경우에도 점만 반환됩니다.

다음 항목 내의 점을 쿼리할 수 있습니다.

  • 경계 박스

  • 다각형

검색할 좌표를 지정할 때는 경도를 먼저 지정한 다음 위도를 지정해야 합니다. 경도 값 범위는 -180 ~ 180 사이이며 둘 다 포함합니다. 위도 값 범위는 -90 ~ 90 이며 둘 다 포함합니다. 좌표 값은 정수 또는 이중 값일 수 있습니다.

참고

Atlas Search에서는 다음을 지원하지 않습니다.

  • 기본값이 좌표 기준계(CRS)

  • 평면형 XY 좌표계(2차원)

  • 좌표 쌍 점 표기법(즉, pointFieldName: [12, 34])

geoWithin 의 구문은 다음과 같습니다:

{
"$search": {
"index": <index name>, // optional, defaults to "default"
"geoWithin": {
"path": "<field-to-search>",
"box | circle | geometry": <object>,
"score": <score-options>
}
}
}

geoWithin 는 다음 용어를 사용하여 쿼리를 구성합니다:

필드
유형
설명
필요성

box

객체

검색할 상자의 왼쪽 아래와 오른쪽 위 GeoJSON 포인트를 지정하는 객체입니다. 객체는 다음 필드를 사용합니다.

  • bottomLeft - 왼쪽 하단 GeoJSON 포인트.

  • topRight - 오른쪽 상단 GeoJSON 점.

GeoJSON 객체 내에서 GeoJSON 데이터를 지정하는 방법을 알아보려면 GeoJSON 객체를 참조하세요.

box, circle 또는 geometry 중 하나가 필요합니다.

조건부

circle

객체

Atlas Search의 중심점과 반경을 미터 단위로 지정하는 객체입니다. 객체에는 다음과 같은 GeoJSON 필드가 포함되어 있습니다.

  • center - GeoJSON 포인트로 지정된 원의 중심입니다.

  • radius - 숫자인 반경은 미터 단위로 지정됩니다. 값은 0 이상이어야 합니다.

GeoJSON 객체 내에서 GeoJSON 데이터를 지정하는 방법을 알아보려면 GeoJSON 객체를 참조하세요.

circle, box 또는 geometry 중 하나가 필요합니다.

조건부

geometry

GeoJSON 객체

Atlas Search 내에서 다중 GeoJSON 다각형 또는 다각형 을 지정하는 객체입니다. 다각형은 마지막 위치가 첫 번째 위치와 동일한 닫힌 루프로 지정되어야 합니다.

지리 공간적 결과를 계산할 때 Atlas Search geoShapegeoWithin 연산자와 MongoDB $geoIntersects 연산자 는 서로 다른 도형을 사용합니다. 이 차이점은 Atlas Search 와 MongoDB 가 다각형 가장자리를 그리는 방식에서 확인할 수 있습니다.

Atlas Search는 데카르트 거리 를 기반으로 다각형을 그립니다. 은 좌표 참조 시스템에서 두 점을 잇는 가장 짧은 선입니다.

MongoDB 는 측지 유형용 타사 라이브러리 위에 구축된 dsphere 2 인덱스를 기반으로 하는 측지 모드 또는 2d 인덱스의 플랫 모드 를 사용하여 다각형을 그립니다. 학습 내용은 GeoJSON 객체를 참조하세요.

Atlas Search와 MongoDB는 다각형과 관련된 지리 공간적 쿼리에 대해 서로 다른 결과를 반환할 수 있습니다.

GeoJSON 객체 내에서 GeoJSON 데이터를 지정하는 방법을 알아보려면 GeoJSON 객체를 참조하세요.

geometry, box 또는 circle 중 하나가 필요합니다.

조건부

path

문자열 또는 문자열 배열

인덱싱된 지역 유형에서 검색할 필드를 하나 이상 입력합니다. 경로 구성을 참조하세요.

score

객체

일치하는 검색 결과에 할당할 점수입니다. 기본적으로 결과의 점수1 입니다. 다음 옵션을 사용하여 점수를 수정할 수 있습니다.

  • boost결과 점수에 주어진 숫자를 곱합니다.

  • constant결과 점수를 주어진 숫자로 바꿉니다.

  • function결과 점수를 주어진 표현식으로 대체합니다.

쿼리에서 score 사용에 대한 자세한 내용은 결과에서 문서 채점하기를 참조하십시오.

no

다음 예제에서는 sample_airbnb 데이터베이스의 listingsAndReviews 컬렉션을 사용합니다. 클러스터에 샘플 데이터 세트 가 있는 경우 지리적 유형에 대한 사용자 지정 Atlas Search 인덱스를 만들고 클러스터에서 예제 쿼리를 실행할 수 있습니다.

샘플 데이터 집합을 이미 로드한 경우, Atlas Search 시작하기 자습서에 따라 인덱스 정의를 만들고 Atlas Search 쿼리를 실행하세요.

다음 샘플 데이터 세트 중 하나를 사용하여 geoWithin 연산자와 함께 Atlas Search 검색 쿼리를 실행할 수 있습니다.

listingsAndReviews collection의 address.location 필드를 인덱싱하려면 다음 샘플 인덱스 정의를 사용합니다.

1{
2 "mappings": {
3 "fields": {
4 "address": {
5 "fields": {
6 "location": {
7 "type": "geo"
8 }
9 },
10 "type": "document"
11 }
12 }
13 }
14}

다음 쿼리는 geoWithin 연산자와 box 필드를 사용하여 오스트레일리아의 경계 상자 내 속성을 검색합니다.

쿼리에는 다음이 포함됩니다.

  • $limit 단계는 출력을 3 결과로만 제한합니다.

  • nameaddress를 제외한 모든 필드를 제외하려면 $project 단계를 수행합니다.

참고

Atlas Search 검색 쿼리에 default 이라는 인덱스를 지정할 필요가 없습니다. 인덱스에 다른 이름이 있는 경우 index 필드를 지정해야 합니다.

1db.listingsAndReviews.aggregate([
2 {
3 "$search": {
4 "geoWithin": {
5 "path": "address.location",
6 "box": {
7 "bottomLeft": {
8 "type": "Point",
9 "coordinates": [112.467, -55.050]
10 },
11 "topRight": {
12 "type": "Point",
13 "coordinates": [168.000, -9.133]
14 }
15 }
16 }
17 }
18 },
19 {
20 $limit: 3
21 },
22 {
23 $project: {
24 "_id": 0,
25 "name": 1,
26 "address": 1
27 }
28 }
29])

쿼리는 다음과 같은 결과를 반환합니다.

1{
2 "name" : "Surry Hills Studio - Your Perfect Base in Sydney",
3 "address" : {
4 "street" : "Surry Hills, NSW, Australia",
5 "suburb" : "Darlinghurst",
6 "government_area" : "Sydney",
7 "market" : "Sydney",
8 "country" : "Australia",
9 "country_code" : "AU",
10 "location" : {
11 "type" : "Point",
12 "coordinates" : [ 151.21554, -33.88029 ],
13 "is_location_exact" : true
14 }
15 }
16}
17{
18 "name" : "Sydney Hyde Park City Apartment (checkin from 6am)",
19 "address" : {
20 "street" : "Darlinghurst, NSW, Australia",
21 "suburb" : "Darlinghurst",
22 "government_area" : "Sydney",
23 "market" : "Sydney",
24 "country" : "Australia",
25 "country_code" : "AU",
26 "location" : {
27 "type" : "Point",
28 "coordinates" : [ 151.21346, -33.87603 ],
29 "is_location_exact" : false
30 }
31 }
32}
33{
34 "name" : "THE Place to See Sydney's FIREWORKS",
35 "address" : {
36 "street" : "Rozelle, NSW, Australia",
37 "suburb" : "Lilyfield/Rozelle",
38 "government_area" : "Leichhardt",
39 "market" : "Sydney",
40 "country" : "Australia",
41 "country_code" : "AU",
42 "location" : {
43 "type" : "Point",
44 "coordinates" : [ 151.17956, -33.86296 ],
45 "is_location_exact" : true
46 }
47 }
48}

다음 쿼리는 geoWithin 연산자와 circle 필드를 사용하여 캐나다의 지정된 좌표에서 반경 1마일 이내에 있는 속성을 검색합니다.

쿼리에는 다음이 포함됩니다.

  • $limit 단계는 출력을 3 결과로만 제한합니다.

  • nameaddress를 제외한 모든 필드를 제외하려면 $project 단계를 수행합니다.

참고

Atlas Search 검색 쿼리에 default 이라는 인덱스를 지정할 필요가 없습니다. 인덱스에 다른 이름이 있는 경우 index 필드를 지정해야 합니다.

1db.listingsAndReviews.aggregate([
2 {
3 "$search": {
4 "geoWithin": {
5 "circle": {
6 "center": {
7 "type": "Point",
8 "coordinates": [-73.54, 45.54]
9 },
10 "radius": 1600
11 },
12 "path": "address.location"
13 }
14 }
15 },
16 {
17 $limit: 3
18 },
19 {
20 $project: {
21 "_id": 0,
22 "name": 1,
23 "address": 1
24 }
25 }
26])

쿼리는 다음과 같은 결과를 반환합니다.

1{
2 "name" : "Ligne verte - à 15 min de métro du centre ville.",
3 "address" : {
4 "street" : "Montréal, Québec, Canada",
5 "suburb" : "Hochelaga-Maisonneuve",
6 "government_area" : "Mercier-Hochelaga-Maisonneuve",
7 "market" : "Montreal",
8 "country" : "Canada",
9 "country_code" : "CA",
10 "location" : {
11 "type" : "Point",
12 "coordinates" : [ -73.54949, 45.54548 ],
13 "is_location_exact" : false
14 }
15 }
16}
17{
18 "name" : "Belle chambre à côté Metro Papineau",
19 "address" : {
20 "street" : "Montréal, QC, Canada",
21 "suburb" : "Gay Village",
22 "government_area" : "Ville-Marie",
23 "market" : "Montreal",
24 "country" : "Canada",
25 "country_code" : "CA",
26 "location" : {
27 "type" : "Point",
28 "coordinates" : [ -73.54985, 45.52797 ],
29 "is_location_exact" : false
30 }
31 }
32}
33{
34 "name" : "L'IDÉAL, ( à 2 min du métro Pie-IX ).",
35 "address" : {
36 "street" : "Montréal, Québec, Canada",
37 "suburb" : "Mercier-Hochelaga-Maisonneuve",
38 "government_area" : "Mercier-Hochelaga-Maisonneuve",
39 "market" : "Montreal",
40 "country" : "Canada",
41 "country_code" : "CA",
42 "location" : {
43 "type" : "Point",
44 "coordinates" : [ -73.55208, 45.55157 ],
45 "is_location_exact" : true
46 }
47 }
48}

다음 예시에서는 geometry 필드와 함께 geoWithin 연산자를 사용하여 하와이의 속성을 검색합니다. type 필드는 해당 영역이 GeoJSON 다각형인지 다중 다각형인지를 지정합니다.

쿼리에는 다음이 포함됩니다.

  • $limit 단계는 출력을 3 결과로만 제한합니다.

  • nameaddress를 제외한 모든 필드를 제외하려면 $project 단계를 수행합니다.

참고

Atlas Search 검색 쿼리에 default 이라는 인덱스를 지정할 필요가 없습니다. 인덱스에 다른 이름이 있는 경우 index 필드를 지정해야 합니다.

1 db.listingsAndReviews.aggregate([
2 {
3 "$search": {
4 "geoWithin": {
5 "geometry": {
6 "type": "Polygon",
7 "coordinates": [[[ -161.323242, 22.512557 ],
8 [ -152.446289, 22.065278 ],
9 [ -156.09375, 17.811456 ],
10 [ -161.323242, 22.512557 ]]]
11 },
12 "path": "address.location"
13 }
14 }
15 },
16 {
17 $limit: 3
18 },
19 {
20 $project: {
21 "_id": 0,
22 "name": 1,
23 "address": 1
24 }
25 }
26 ])

쿼리는 다음과 같은 결과를 반환합니다.

1{
2 "name" : "Ocean View Waikiki Marina w/prkg",
3 "address" : {
4 "street" : "Honolulu, HI, United States",
5 "suburb" : "Oʻahu",
6 "government_area" : "Primary Urban Center",
7 "market" : "Oahu",
8 "country" : "United States",
9 "country_code" : "US",
10 "location" : {
11 "type" : "Point",
12 "coordinates" : [ -157.83919, 21.28634 ],
13 "is_location_exact" : true
14 }
15 }
16}
17{
18 "name" : "Kailua-Kona, Kona Coast II 2b condo",
19 "address" : {
20 "street" : "Kailua-Kona, HI, United States",
21 "suburb" : "Kailua/Kona",
22 "government_area" : "North Kona",
23 "market" : "The Big Island",
24 "country" : "United States",
25 "country_code" : "US",
26 "location" : {
27 "type" : "Point",
28 "coordinates" : [ -155.96445, 19.5702 ],
29 "is_location_exact" : true
30 }
31 }
32}
33{
34 "name" : "LAHAINA, MAUI! RESORT/CONDO BEACHFRONT!! SLEEPS 4!",
35 "address" : {
36 "street" : "Lahaina, HI, United States",
37 "suburb" : "Maui",
38 "government_area" : "Lahaina",
39 "market" : "Maui",
40 "country" : "United States",
41 "country_code" : "US",
42 "location" : {
43 "type" : "Point",
44 "coordinates" : [ -156.68012, 20.96996 ],
45 "is_location_exact" : true
46 }
47 }
48}
1db.listingsAndReviews.aggregate([
2 {
3 "$search": {
4 "geoWithin": {
5 "geometry": {
6 "type": "MultiPolygon",
7 "coordinates": [
8 [[[-157.8412413882,21.2882235819],
9 [-157.8607925468,21.2962046205],
10 [-157.8646640634,21.3077019651],
11 [-157.862776699,21.320776283],
12 [-157.8341758705,21.3133826738],
13 [-157.8349985678,21.3000822569],
14 [-157.8412413882,21.2882235819]]],
15 [[[-157.852898124,21.301208833],
16 [-157.8580050499,21.3050871833],
17 [-157.8587346108,21.3098050385],
18 [-157.8508811028,21.3119240258],
19 [-157.8454308541,21.30396767],
20 [-157.852898124,21.301208833]]]
21 ]
22 },
23 "path": "address.location"
24 }
25 }
26 },
27 {
28 $limit: 3
29 },
30 {
31 $project: {
32 "_id": 0,
33 "name": 1,
34 "address": 1
35 }
36 }
37])

쿼리는 다음과 같은 결과를 반환합니다.

1{
2 "name" : "Heart of Honolulu, 2BD gem! Free Garage Parking!",
3 "address" : {
4 "street" : "Honolulu, HI, United States",
5 "suburb" : "Makiki/Lower Punchbowl/Tantalus",
6 "government_area" : "Primary Urban Center",
7 "market" : "Oahu",
8 "country" : "United States",
9 "country_code" : "US",
10 "location" : {
11 "type" : "Point",
12 "coordinates" : [ -157.84343, 21.30852 ],
13 "is_location_exact" : false
14 }
15 }
16}
17{
18 "name" : "Private Studio closed to town w/ compact parking",
19 "address" : {
20 "street" : "Honolulu, HI, United States",
21 "suburb" : "Oʻahu",
22 "government_area" : "Primary Urban Center",
23 "market" : "Oahu",
24 "country" : "United States",
25 "country_code" : "US",
26 "location" : {
27 "type" : "Point",
28 "coordinates" : [ -157.85228, 21.31184 ],
29 "is_location_exact" : true
30 }
31 }
32}
33{
34 "name" : "Comfortable Room (2) at Affordable Rates",
35 "address" : {
36 "street" : "Honolulu, HI, United States",
37 "suburb" : "Oʻahu",
38 "government_area" : "Primary Urban Center",
39 "market" : "Oahu",
40 "country" : "United States",
41 "country_code" : "US",
42 "location" : {
43 "type" : "Point",
44 "coordinates" : [ -157.83889, 21.29776 ],
45 "is_location_exact" : false
46 }
47 }
48}

돌아가기

geoShape