sql >> Base de Datos >  >> NoSQL >> MongoDB

Índice Mongodb 2dsphere para campo de matriz anidada

El documento que proporcionó me parece bien, también hice una prueba simple con una versión corta de su documento y me funciona.

"_id" : ObjectId("530cb07c009d8c323b477957"),
        "time_from" : ISODate("2014-02-25T15:02:20.714Z"),
        "checkin" : [
                {
                        "user_id" : 1,
                        "loc" : {
                                "type" : "Point",
                                "coordinates" : [
                                        73.43,
                                        42.22
                                ]
                        }
                }
        ]

db.testGeo.ensureIndex( { "checkin.loc" : "2dsphere"  } );

Así que sugiero revisar otros documentos en la colección, algunos de ellos podrían estar mal formados para el índice. También asegúrese de que los elementos de su matriz de coordenadas no sean cadenas. Porque este documento no es válido para el índice 2dsphere:

"_id" : ObjectId("530cb07c009d8c323b477957"),
            "time_from" : ISODate("2014-02-25T15:02:20.714Z"),
            "checkin" : [
                    {
                            "user_id" : 1,
                            "loc" : {
                                    "type" : "Point",
                                    "coordinates" : [
                                            "73.43",
                                            "42.22"
                                    ]
                            }
                    }
            ]

Tenga en cuenta las comillas para los elementos de coordenadas que los convierte en cadenas.

RESPUESTA AL COMENTARIO: Mongo permite solo un índice geoespacial por colección. Por lo tanto, no tiene que especificar la ruta de campo completa para su comando de ejecución. El nombre de la colección es suficiente. Esto debería funcionar si el nombre de la colección es checkin_20140222

db.runCommand( { geoNear: 'checkin_20140222', near: {type: "Point", coordinates: [73.43, 42.22]}, spherical: true, maxDistance: 40000})

¡Espero que ayude!