【问题标题】:Any way I can change in runtime mongo document name我可以以任何方式更改运行时 mongo 文档名称
【发布时间】:2019-03-22 08:17:40
【问题描述】:

在项目中,我们需要根据日期每天更改集合名称后缀。

所以一日收藏被命名为:

samples_22032019

第二天就到了

samples_23032019

因此,我每天都需要更改后缀并重新编译 spring-boot 应用程序。有什么办法可以改变它,以便可以根据当前日期动态计算集合/表?对 MongoRepository 有什么建议吗?

【问题讨论】:

标签: mongodb spring-boot spring-data-mongodb mongorepository


【解决方案1】:

考虑以下是你的bean。您可以使用带有 Spring 表达式语言的 @Document 注释在运行时解析后缀。如下图所示,

@Document(collection = "samples_#{T(com.yourpackage.Utility).getDateSuffix()}")
public class Samples {
   private String id;
   private String name;
}

现在在一个实用方法中拥有您的日期更改功能,spring 可以在运行时解决。 SpEL 在这种情况下很方便。

package com.yourpackage;

public class Utility {
  public static final String getDateSuffix() {
     //Add your real logic here, below is for representational purpose only.
     return DateTime.now().toDate().toString();;
  }
}

HTH!

【讨论】:

    【解决方案2】:

    创建一个每天运行的 cron 作业并为您的集合生成新名称并执行以下代码。在这里,我使用MongoDatabse 获取集合,而不是使用MongoNamespace,我们可以重命名集合。 要获取旧/新集合名称,您可以编写一个单独的方法。

    @Component
    public class RenameCollectionTask {
    
      @Scheduled(cron = "${cron}")
      public void renameCollection() {
    
        // creating mongo client object
        final MongoClient client = new MongoClient(HOST_NAME, PORT);
        // selecting the mongo database
        final MongoDatabase database = client.getDatabase("databaseName");
        // selecting the mongo collection
        final MongoCollection<Document> collection = database.getCollection("oldCollectionName");
        // creating namespace
        final MongoNamespace newName = new MongoNamespace("databaseName", "newCollectionName");
        // renaming the collection
        collection.renameCollection(newName);
        System.out.println("Collection has been renamed");
        // closing the client
        client.close();
      }
    }
    

    要指定集合的​​名称,您可以参考this,这样就不需要每次重新启动。

    renameCollection() 方法有以下限制:
    1)它不能在数据库之间移动一个集合。
    2) sharded collections 不支持。
    3) 不能重命名views
    详情请参考this

    【讨论】:

      猜你喜欢
      • 2018-06-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2017-08-14
      相关资源
      最近更新 更多