Mongo não consegue encontrar minha coleção

10

Meu servidor mongodb possui um banco de dados chamado villageContents

Possui uma coleção chamada tablebusiness

Se eu correr mongo eu vi

MongoDB shell version: 2.0.7
connecting to: test
>

Eu me pergunto o que é "teste". Não há um banco de dados chamado teste lá.

Eu tentei executar

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

Eu tentei executar

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

O que eu fiz errado?

Então eu fiz

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

Nada aparece. Os índices nem são adicionados.

Então, oque há de errado?

user4951
fonte

Respostas:

8

Eu me pergunto o que é "teste". Não há um banco de dados chamado teste lá.

Este é apenas o banco de dados padrão que o mongo shell usa quando se conecta, a menos que você insira algo, ele está vazio. Você pode fazer isso com qualquer banco de dados, de fato, teste é apenas o padrão.

O primeiro comando não funcionará porque você não o prefixou com db; portanto, ele tenta encontrar "isikota" como uma variável (javascript) e falha em encontrá-lo. Da mesma forma, sua próxima tentativa faz o mesmo com uma variável "teste" inexistente.

Finalmente, este comando está no formato correto (prefixado com db):

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

Mas você não alterou o banco de dados (com use <database name>) ou pelo menos não mencionou a tentativa de, pelo menos. O que isso fará é criar um índice 2D (geoindex) em um campo "LatitudeLongitude" em uma coleção denominada "isikota.tablebusiness" no banco de dados de teste (o banco de dados sempre se refere ao banco de dados que você está usando no momento). Mesmo que essa coleção não exista, o índice será criado (isso é apenas uma inserção no espaço de nome system.indexes) e, portanto, o comando será bem-sucedido. Você simplesmente não verá mais nada, porque acredito que você ainda está operando no banco de dados de teste.

Supondo que seus dados estejam em um banco de dados chamado "isikota" e que "tablebusiness" seja sua coleção, o que você realmente deseja fazer é:

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

Isso criará o índice no campo "LatitudeLongitude" em uma coleção chamada "tablebusiness" em um banco de dados chamado "isikota".

Adam C
fonte
E existe de fato um banco de dados chamado test. Eu não vi.
usar o seguinte comando