Skip to content
广告❤️成为赞助商

动态集合处理器

在数据库应用程序开发中,我们有时需要根据不同的条件查询不同的集合。Mongo-Plus 提供了一个动态集合处理器 CollectionNameHandler,它允许我们在运行时动态地改变 MongoDB 语句中的集合名,这对于处理分表逻辑非常有用

CollectionNameHandler

  • 动态集合处理接口
  • String dynamicCollectionName(ExecuteMethodEnum,Object[],MongoNamespace): 参数分别对应:执行的方法枚举、参数、命名空间

示例

实现 CollectionNameHandler 接口,创建一个动态集合处理器,并且注册为Bean。在这个例子中,我们判断,如果查询参数中包含userName参数,并且userName参数值为张三,则将集合名称修改为user_zhangsan

java
@Component
public class CustomCollectionNameHandler implements CollectionNameHandler {
    @Override
    public String dynamicCollectionName(ExecuteMethodEnum executeMethodEnum, Object[] source, MongoNamespace namespace) {
        if (executeMethodEnum == ExecuteMethodEnum.QUERY){
            // 具体类型参数转换参考com.anwen.mongo.execute.Execute接口,
            // 比如查询(executeQuery(Bson, BasicDBObject, BasicDBObject, Class<T>, MongoCollection<Document>)),
            // 对应的第0个参数类型为Bson
            Bson bson = (Bson) source[0];
            BsonString userName = bson.toBsonDocument().getString("userName",new BsonString(""));
            // 如果userName == 张三
            if (userName.getValue().equals("张三")) {
                //返回新集合名为:user_zhangsan
                return "user_zhangsan";
            }
        }
        //条件不满足则返回原名称
        return namespace.getCollectionName();
    }
}