【问题标题】:is there any way to restore predefined schema to mongoDB?有没有办法将预定义的模式恢复到 mongoDB?
【发布时间】:2014-06-09 12:54:25
【问题描述】:

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

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

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

ps:我有一个多线程程序,每个线程都插入和更新我的 mongo 集合。我只想创建一次索引。

谢谢。

【问题讨论】:

  • 你到底在问什么?您是否要批量加载或恢复集合并仅在完成后构建索引?您是否尝试过删除索引,然后仅在处理结束时创建?
  • 我想知道在运行我的程序之前我是否定义了键或索引?例如,在 cassandra 中,我们有 .cql 文件并恢复它以创建模式。

标签: mongodb indexing restore


【解决方案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

这将在您的本地主机上名为dbName 的数据库上创建这些索引。值得注意的是,如果您的数据库和/或集合尚未创建,这将创建您为其添加索引的数据库和集合。

编辑

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

【讨论】:

    【解决方案2】:

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

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

    创建索引的命令对于每种实现语言一般都是相同的,例如:

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

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

    对同一索引创建方法的后续调用实际上不会重新创建索引。如果为已存在的索引指定了相同的索引,则实际上将其作为“无操作”跳过。

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

    【讨论】:

    • 感谢您的帮助。 :) 我担心这种编码方式是错误的。
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2011-01-21
    • 1970-01-01
    • 2016-05-11
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    相关资源
    最近更新 更多