복붙노트

[MONGODB] MongoDB를 '$ geoNear 쿼리에 대한 인덱스를 찾을 수 없습니다'

MONGODB

MongoDB를 '$ geoNear 쿼리에 대한 인덱스를 찾을 수 없습니다'

난 그냥 간단한 근처 쿼리 작업을 얻기 위해 노력하고있어. 여기 내 문서의 샘플입니다.

{"point": 
  {"type": "Point", 
     "coordinates": [30.443902444762696, -84.27326978424058]}, 
   "created_on": {"$date": 1398016710168}, 
   "radius": 180, 
   "user": {"$oid": "53543188eebc5c0cc416b77c"}, 
   "_id": {"$oid": "53544306eebc5c0ecac6cfba"}, 
   "expires_on": {"$date": 1399831110168}
}

및 mongod와 나는 명령을 시도 :

db.bar.find({point: {$near: [-84.26060492426588, 30.45023887165371]}});

하지만 난이 오류가 발생합니다 :

아마 내 Google 쿵푸 오늘 너무 선명하지 않습니다하지만 난 아무것도 찾을 수 없습니다. 또한, 나는 인덱스 명령을 확인 달렸다. 내 의도는 이러한지도 위치 점이다.

db.bar.ensureIndex({a:1});
db.bar.ensureIndex({geo:"2d"});

해결법

  1. ==============================

    1.몇 가지 문제는, 당신은 foo는 데이터베이스의 foo는 모음에 인덱스를 생성하지만, 바 수집을 조회한다. 올바른 컬렉션해야합니다.

    몇 가지 문제는, 당신은 foo는 데이터베이스의 foo는 모음에 인덱스를 생성하지만, 바 수집을 조회한다. 올바른 컬렉션해야합니다.

    당신이 geoJson 객체를 지원하는 "2dsphere"인덱스를 추가 할 필요가 삽입 한 문서를 읽기. 이 지수는 시도하므로, 문서의 "포인트"요소에 있어야합니다

    db.bar.createIndex({point:"2dsphere"});
    

    그런 다음 쿼리와 쿼리에 대한 geoJson의 OBJ를 제공하여 다음 수 있습니다 :

    db.bar.find(
       { point :
           { $near :
              {
                $geometry : {
                   type : "Point" ,
                   coordinates : [-84.27326978424058, 30.443902444762696] },
                $maxDistance : 1
              }
           }
        }
    )
    
  2. ==============================

    2.

    db.prod.createIndex({ "location": "2d" })
    

    이것은 나를 위해 같은 문제에 대한 해결했다.

    자극이 내 컬렉션의 이름과 위치는 어디 컬럼의 이름 인 저장 지리 위치 (GeoPoint의)

    동일한에 대한 몇 가지 논의는 여기에서 찾을 수 있습니다

  3. ==============================

    3.그래서 잘못 여기에 몇 가지있을 것 같습니다 :

    그래서 잘못 여기에 몇 가지있을 것 같습니다 :

    db.foo.createIndex({geo: "2d"})
    

    현재이 "지오"라는 필드가 아닌 데이터와 필드가 그 자리에 있었어야 때문에 "실패"하지 않습니다. 올바른 필드입니다 대신 "포인트"를 사용했다면, 당신은 인덱스의이 유형은 GeoJSON 데이터에 대한 잘못된 있음을 알리는 오류가 발생했을 것입니다. 당신은 "2dsphere"인덱스가 필요합니다 :

    db.points.createIndex({ "point": "2dsphere" })
    
    db.points.find({point: {
        $near: {
            $geometry:{ 
                type: "Point", 
                coordinates: [-84.26060492426588, 30.45023887165371]
            }
        }
    }})
    
    

    $ 근처의 설명서를 참조하십시오

  4. ==============================

    4.이미 색인을 만들려고 몇 가지 구문 또는 필드 잘못을 가지고있는 경우에 위의 답변뿐만 아니라, 당신은 실행할 수 있습니다

    이미 색인을 만들려고 몇 가지 구문 또는 필드 잘못을 가지고있는 경우에 위의 답변뿐만 아니라, 당신은 실행할 수 있습니다

    dB .dropIndexes ().; 모든 인덱스를 정리하고 제대로 다시 만들려면.

    또한, 인덱스가없는 좌표 자체에 "좌표"의 부모에 작성해야합니다 :

    {
       "_id": 59ac03d168eaaa14c2a57a00",
       "location":{
          "type":"Point",
          "coordinates":[
             131.6667,
             57.8368
          ]
       },
       "age":53,
       "username":"Brandi_Greenfelder"
    }
    

    dB .createIndex ({위치 '2dsphere'}).;

    이 새로운 일이 같은 관심이있다 "2D"와 "2dsphere", 두 번째를 사용합니다.

  5. from https://stackoverflow.com/questions/23188875/mongodb-unable-to-find-index-for-geonear-query by cc-by-sa and MIT license