Mongo no puede encontrar mi colección

10

Mi servidor mongodb tiene una base de datos llamada villageContents

Tiene una colección llamada tablebusiness

Si corro mongo vi

MongoDB shell version: 2.0.7
connecting to: test
>

Me pregunto qué es "prueba". No hay una base de datos llamada prueba allí.

Traté de ejecutar

> villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Wed Aug 15 09:28:28 ReferenceError:is not defined (shell):1
>

Traté de ejecutar

> test.villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Wed Aug 15 09:29:13 ReferenceError: test is not defined (shell):1
>

¿Qué hice mal?

Entonces lo hice

db.villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})

Nada aparece Los índices ni siquiera se agregan.

¿Así que qué hay de malo?

user4951
fuente

Respuestas:

8

Me pregunto qué es "prueba". No hay una base de datos llamada prueba allí.

Esta es solo la base de datos predeterminada que utiliza el shell mongo cuando se conecta, a menos que inserte algo, está vacío. De hecho, puede hacer esto con cualquier base de datos, la prueba es solo la predeterminada.

El primer comando no funcionará porque no lo prefijaste con db, por lo que intenta encontrar "isikota" como una variable (javascript) y no lo encuentra. De manera similar, su próximo intento hace lo mismo con una variable "prueba" inexistente.

Finalmente, este comando tiene la forma correcta (con el prefijo db):

db.isikota.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})

Pero, no cambió la base de datos (con use <database name>) o al menos no mencionó intentar al menos. Lo que esto va a hacer es crear un índice 2d (geoindex) en un campo "LatitudeLongitude" en una colección llamada "isikota.tablebusiness" en la base de datos de prueba (db siempre se refiere a la base de datos que está utilizando actualmente). Incluso si esta colección no existe, se creará el índice (esto es solo una inserción en el espacio de nombres system.indexes) y, por lo tanto, el comando tiene éxito. Simplemente no verá nada más, porque creo que todavía está operando en la base de datos de prueba.

Asumiendo que sus datos están realmente en una base de datos llamada "isikota" y que "tablebusiness" es su colección, lo que realmente quiere hacer es esto:

use isikota;
db.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"});

Eso creará el índice en el campo "LatitudeLongitude" en una colección llamada "tablebusiness" en una base de datos llamada "isikota".

Adam C
fuente
Y de hecho hay una base de datos llamada prueba. No lo vi
user4951