代码之家  ›  专栏  ›  技术社区  ›  Marcin Kapusta

我可以在运行时修改mongo文档名吗

  •  0
  • Marcin Kapusta  · 技术社区  · 6 年前

    所以一天的收藏被命名为:

    samples_22032019
    

    第二天就可以了

    samples_23032019
    

    因为这个,我每天都需要更改后缀并重新编译springboot应用程序。我有什么方法可以更改它,以便可以根据当前日期动态计算集合/表?有什么建议吗?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Sunand Padmanabhan    6 年前

    考虑到下面是你的豆子。可以使用@Document注释和spring表达式语言在运行时解析后缀。就像下面的节目,

    @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();;
      }
    }
    

    啊!

        2
  •  0
  •   Nishant Bhardwaz    6 年前

    创建一个cron作业,每天为您的集合运行generateNewName,并执行以下代码。我在这里用 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() 方法具有以下限制:

    2) 在上不支持它 sharded collections .
    views .
    参考 this 了解详情。