Mongo nie może znaleźć mojej kolekcji

10

Mój serwer mongodb ma bazę danych o nazwie villageContents

Ma kolekcję o nazwie tablebusiness

Gdybym uruchomił mongo, zobaczyłem

MongoDB shell version: 2.0.7
connecting to: test
>

Zastanawiam się, czym jest „test”. Nie ma tam bazy danych o nazwie test.

Próbowałem wykonać

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

Próbowałem wykonać

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

Co zrobiłem źle?

Potem zrobiłem

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

Nic się nie pojawia. Indeksy nie są nawet dodawane.

Więc co jest nie tak?

użytkownik4951
źródło

Odpowiedzi:

8

Zastanawiam się, czym jest „test”. Nie ma tam bazy danych o nazwie test.

Jest to tylko domyślna baza danych używana przez powłokę mangową podczas łączenia, chyba że coś wstawisz, jest pusta. Możesz to zrobić z dowolną bazą danych, test jest tylko domyślny.

Pierwsze polecenie nie zadziała, ponieważ nie poprzedzono go db, dlatego próbuje znaleźć „isikota” jako zmienną (javascript) i nie może go znaleźć. Podobnie twoja kolejna próba robi to samo z nieistniejącą zmienną „testową”.

Wreszcie, to polecenie ma właściwą postać (z przedrostkiem db):

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

Ale nie zmieniłeś bazy danych (z use <database name>), a przynajmniej nie wspomniałeś o próbie. W tym celu należy utworzyć indeks 2d (geoindex) w polu „LatitudeLongitude” w kolekcji o nazwie „isikota.tablebusiness” w testowej bazie danych (db zawsze odnosi się do bazy danych, z której aktualnie korzystasz). Nawet jeśli ta kolekcja nie istnieje, indeks zostanie utworzony (jest to tylko wstawka do przestrzeni nazw system.indexes), a zatem polecenie się powiedzie. Po prostu nie zobaczysz nic innego, ponieważ uważam, że nadal działasz na testowej bazie danych.

Zakładając, że twoje dane znajdują się w bazie danych o nazwie „isikota” i że „tablebusiness” jest Twoją kolekcją, tak naprawdę chcesz to zrobić:

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

Spowoduje to utworzenie indeksu w polu „LatitudeLongitude” w kolekcji o nazwie „tablebusiness” w bazie danych o nazwie „isikota”.

Adam C.
źródło
I rzeczywiście istnieje baza danych o nazwie test. Nie widziałem tego
user4951,