Монго не может найти мою коллекцию

10

Мой сервер mongodb имеет базу данных с именем villageContents

Он имеет коллекцию под названием tablebusiness

Если я бегу Монго, я видел

MongoDB shell version: 2.0.7
connecting to: test
>

Интересно, что такое «тест»? Там нет базы данных с именем test.

Я пытался выполнить

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

Я пытался выполнить

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

Что я сделал не так?

Тогда я сделал

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

Ничего не появляется Индексы даже не добавляются.

Так что не так?

user4951
источник

Ответы:

8

Интересно, что такое «тест»? Там нет базы данных с именем test.

Это просто база данных по умолчанию, которую оболочка mongo использует при подключении, если вы что-то не вставили, она пуста. Вы можете сделать это с любой базой данных, тест по умолчанию.

Первая команда не будет работать, потому что вы не указали префикс db, так как она пытается найти «isikota» как переменную (javascript) и не может ее найти. Точно так же ваша следующая попытка делает то же самое с несуществующей «тестовой» переменной.

Наконец, эта команда является правильной формой (с префиксом db):

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

Но вы не изменили базу данных (с use <database name>) или, по крайней мере, вы не упомянули попытки по крайней мере. Для этого нужно создать 2d (geoindex) индекс в поле «LatitudeLongitude» для коллекции с именем «isikota.tablebusiness» в тестовой базе данных (db всегда ссылается на базу данных, которую вы используете в данный момент). Даже если эта коллекция не существует, индекс будет создан (это просто вставка в пространство имен system.indexes), и, следовательно, команда будет выполнена успешно. Вы просто больше ничего не увидите, потому что я считаю, что вы все еще работаете с тестовой базой данных.

Предполагая, что ваши данные на самом деле находятся в базе данных «isikota» и что «tablebusiness» - это ваша коллекция, вы действительно хотите сделать следующее:

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

Это создаст индекс в поле «LatitudeLongitude» в коллекции с именем «tablebusiness» в базе данных с именем «isikota».

Адам С
источник
И действительно, есть база данных под названием test. Я этого не видел.
user4951