【问题标题】:How do I rename a mongo collection in Mongoid?如何在 Mongoid 中重命名 mongo 集合?
【发布时间】:2012-08-18 07:57:21
【问题描述】:

我有一个名为艺术家的收藏,我想将其重命名为 Artist_lookups。我该怎么做?

【问题讨论】:

    标签: mongoid mongoid3


    【解决方案1】:

    使用 mongoid5 / mongo ruby​​ 驱动程序 2:

    # if you need to check whether foo exists
    return unless Mongoid.default_client.collections.map(&:name).include?('foo')
    
    # rename to bar
    Mongoid.default_client.use(:admin).command(
      renameCollection: "#{Mongoid.default_client.database.name}.foo",
      to: "#{Mongoid.default_client.database.name}.bar"
    )
    

    【讨论】:

      【解决方案2】:
      db.artists.renameCollection("artist_lookups")
      

      肯定会起作用。

      【讨论】:

        【解决方案3】:

        很简单,在 mongo shell 中,这样做:

        db.artists.renameCollection("artist_lookups");

        如果您想删除 artist_lookups(如果存在):

        db.artists.renameCollection("artist_lookups", true);

        你可以得到一些例外。

        • 10026 – 如果源命名空间不存在则引发。
        • 10027 – 如果目标命名空间存在且 dropTarget 为 false 或未指定,则引发。
        • 15967 – 如果目标命名空间是无效的集合名称,则引发。

        【讨论】:

          【解决方案4】:

          来自Mongoid Docs

          class Band
            include Mongoid::Document
            store_in collection: "artists", database: "music", session: "secondary"
          end
          

          在您的模型中使用store_in collection: "artist_lookups"。这将允许您将 Artist 模型存储在 artist_lookups 集合中。

          如果您想保留artists集合中的现有数据并对其进行重命名,建议您暂时关闭您的应用,在您的MongoDB服务器上将集合重命名为artist_lookups,然后重新启动应用。

          【讨论】:

          • 我无法保留模型名称,因为与另一个 Artist 模型发生冲突,所以我采用了后一种方法。
          猜你喜欢
          • 2018-09-14
          • 2015-03-15
          • 2012-02-02
          • 2021-07-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多