我的 mongodb 服务器有一个名为 villageContents 的数据库
它有一个名为 tablebusiness 的集合
如果我运行 mongo 我看到了
MongoDB shell version: 2.0.7
connecting to: test
>
Run Code Online (Sandbox Code Playgroud)
我想知道什么是“测试”。那里没有名为 test 的数据库。
我试图执行
> villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Wed Aug 15 09:28:28 ReferenceError:is not defined (shell):1
>
Run Code Online (Sandbox Code Playgroud)
我试图执行
> test.villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Wed Aug 15 09:29:13 ReferenceError: test is not defined (shell):1
>
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
然后我做了
db.villageContents.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Run Code Online (Sandbox Code Playgroud)
什么都不显示。甚至没有添加索引。
那么怎么了?
我想知道什么是“测试”。那里没有名为 test 的数据库。
这只是 mongo shell 在连接时使用的默认数据库,除非你插入一些东西,否则它是空的。实际上,您可以对任何数据库执行此操作,test 只是默认设置。
第一个命令将不起作用,因为您没有使用 db 为其添加前缀,因此它尝试将“isikota”作为变量(javascript)查找,但未能找到。同样,您的下一次尝试对不存在的“测试”变量执行相同的操作。
最后,这个命令是正确的形式(以 db 为前缀):
db.isikota.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"})
Run Code Online (Sandbox Code Playgroud)
但是,您没有更改数据库(使用use <database name>
),或者至少您没有提到尝试至少。这将要做的是在测试数据库中名为“isikota.tablebusiness”的集合的“LatitudeLongitude”字段上创建一个二维(地理索引)索引(db 总是指您当前使用的数据库)。即使此集合不存在,也会创建索引(这只是对 system.indexes 命名空间的插入),因此命令会成功。您只是看不到其他任何东西,因为我相信您仍在对测试数据库进行操作。
假设您的数据实际上位于名为“isikota”的数据库中,而“tablebusiness”是您的集合,那么您实际上想要做的是:
use isikota;
db.tablebusiness.ensureIndex({"LatitudeLongitude" : "2d"});
Run Code Online (Sandbox Code Playgroud)
这将在名为“isikota”的数据库中名为“tablebusiness”的集合中的“LatitudeLongitude”字段上创建索引。