有没有办法将预定义的架构恢复到mongoDB?

时间:2014-06-09 12:54:25

标签: mongodb indexing restore

我是mongoDB的初学者。我想知道有没有办法将预定义的架构加载到mongoDB? (例如像为此目的使用.cql文件的cassandra)

如果有,请介绍一些关于该文件的结构和恢复方法的文件。

如果没有,我在创建集合时如何只创建一次索引。我认为每次调用insert方法或运行程序时都会创建索引是错误的。

p.s:我有一个多线程程序,每个线程插入并更新我的mongo集合。我想只创建一次索引。

感谢。

2 个答案:

答案 0 :(得分:1)

要在集合上创建索引,您需要使用ensureIndex命令。您只需调用一次即可在集合上创建索引。

如果使用相同的参数重复调用ensureIndex,则只有第一个调用将创建索引,所有后续调用都将无效。

因此,如果您知道要将哪些索引用于数据库,则可以创建一个将调用该命令的脚本。

collAcollB集合创建2个索引的示例insert_index.js文件:

db.collA.ensureIndex({ a : 1});
db.collB.ensureIndex({ b : -1});

你可以从这样的shell中调用它:

mongo --quiet localhost/dbName insert_index.js

这将在localhost上名为dbName的数据库上创建这些索引。值得注意的是,如果尚未创建数据库和/或集合,则会创建数据库和要为其添加索引的集合。

修改

澄清一点。 MongoDB是无模式的,因此您无法恢复它的模式。 您只能创建索引和集合(使用createCollection帮助程序)。

答案 1 :(得分:1)

MongoDB基本上是无模式的,因此没有要恢复的模式或命名空间的定义。

对于索引,可以随时创建这些索引。不需要存在集合,甚至不需要索引的必需字段,因为这将在创建集合时以及插入与定义的字段匹配的文档时进行整理。

创建索引的命令通常与每种实现语言相同,例如:

db.collection.ensureIndex({ a: 1, b: -1 })

将在目标数据库中定义目标集合上的索引,该目标数据库将引用字段" a"和字段" b",后者按降序排列。即使集合甚至数据库尚未存在,也会发生这种情况,或者实际上在这种情况下会建立空白名称空间。

对相同索引创建方法的后续调用实际上不会重新创建索引。如果将相同的索引指定为已存在的索引,则会将其作为" no-operation"实际上跳过。

因此,您可以在应用程序启动时简单地提供所有必需的索引创建语句,并且将创建任何尚未存在的索引。任何已经存在的东西都将被遗弃。