Sólo estoy tratando de conseguir una simple near consulta de trabajo. He aquí una muestra de mi documento.

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

y con mongod he probado el comando:

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

pero me sale este error:

de error: {
«$err» : «no se puede ejecutar la consulta: error de procesamiento de la consulta: ns=foo.barra de skip=0\nTree: GEONEAR campo=punto de maxdist=1.79769 e+308 isNearSphere=0 || Primero: notFirst: ruta completa: punto de\nSort: {}\nProj: {}\n planificador devolvió el error: no se puede encontrar el índice de $geoNear consulta»,
«código» : 17007
}

Tal vez mi google fu no es tan fuerte hoy en día, pero no pude encontrar nada. También, me encontré con la de garantizar índice de comando. Mi intención es que estas son las localizaciones en el mapa.

db.bar.ensureIndex({a:1});
db.bar.ensureIndex({geo:"2d"});
InformationsquelleAutor frankV | 2014-04-20

4 Comentarios

  1. 68

    Pocos problemas, , creó sus índices en el foo colección de los foo base de datos, pero son la consulta de la barra de la colección. Usted necesita estar en la correcta recogida.

    De leer el documento que usted haya insertado necesita agregar un «2dsphere» índice de apoyo a la geoJson objetos. Este índice debe estar en el «punto» elemento de sus documentos, así que trate de

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

    A continuación, puede consultar la siguiente manera proporcionando un geoJson obj para la consulta:

    db.bar.find(
       { point :
           { $near :
              {
                $geometry : {
                   type : "Point" ,
                   coordinates : [-84.27326978424058, 30.443902444762696] },
                $maxDistance : 1
              }
           }
        }
    )
    • Gran, solucionado mi problema con: db.<collection>.ensureIndex({point:"2dsphere"});
    • Gracias amigo, funciona como un encanto..
    • Tenga en cuenta que sinusoidal 3.0.0 ensureIndex ha sido desaprobado y es un alias para createIndex (respuesta editado en consecuencia)
    • ninguna idea sobre esto en la brújula: geoNear command failed: { operationTime: Timestamp(1536208908, 1), ok: 0.0, errmsg: "2dsphere index must have spherical: true", code: 17301, codeName: "Location17301", $clusterTime: { clusterTime: Timestamp(1536208908, 1), para { "near": { "type": "Point", "coordinates": [ -73.99279 , 40.719296 ] }, "distanceField": "distance" }
    • agregar spherical: true después de distanceField: 'distance' . Esto funcionó para mí .
  2. 8
    db.prod.createIndex({ "location": "2d" })

    Esta resuelto por el mismo problema para mí.

    Donde prod es mi nombre de la colección y la ubicación es el nombre de la columna que almacena la ubicación geográfica (GeoPoint)

    Una discusión sobre la misma se puede encontrar aquí

    • muchas gracias. Esto funcionó para mí! 🙂
    • gracias por «la ubicación es el nombre de la columna que almacena la ubicación geográfica (GeoPoint)»
  3. 6

    Parece que hay un par de cosas mal aquí:

    • A partir de los datos que se muestran y también su información de la consulta de la información relevante contenida en el punto de campo y en formato GeoJSON. Su índice de creación:
    db.foo.createIndex({geo: "2d"}) 
    

    No «fallar», porque en la actualidad no es un campo llamado «geo» y el campo con los datos que debería haber estado en ese lugar. Si usted ha usado «punto», que es el campo correcto, entonces usted habría recibido un mensaje de error diciendo que este tipo de índice es válido para la GeoJSON de datos. Usted necesita una «2dsphere» índice:

    db.points.createIndex({ "point": "2dsphere" })
    • Extender el mismo problema, de nuevo los datos en formato GeoJSON y la forma de la consulta es que, por un legado par de coordenadas. Usted necesita para cambiar la consulta argumentos para que ya no falla:
    db.puntos.find({punto: { 
    $cerca de: { 
    $geometría:{ 
    tipo: "Point", 
    coordenadas: [-84.26060492426588, 30.45023887165371] 
    } 
    } 
    }}) 
    
    

    Consulte la documentación de $cerca de

  4. 1

    Además de las respuestas anteriores, si ya has probado a crear un Índice y de algunos de sintaxis o de campo incorrecta, puede ejecutar

    db.<yourcollection>.dropIndexes();
    Para limpiar todos los índices y re-crear de forma adecuada.

    Asimismo, el índice debe ser creado por el padre de «coordenadas», no en las coordenadas de sí mismo:

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

    db.<yourcollection>.createIndex({ location: '2dsphere' });

    La atención, no es «2d» y «2dsphere», el uso de la segunda como es la cosa nueva.

Dejar respuesta

Please enter your comment!
Please enter your name here