You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现MongoDB Schema动态切换数据库与集合?

实现MongoDB动态Schema以操作多数据库/集合的方案

核心思路

把数据库连接、模型创建逻辑封装成可接收参数的函数,通过传入network(目标数据库名)和dex(目标集合名),动态生成对应的数据模型,不用重复复制修改Schema文件。

修改后的动态Schema模块

import mongoose from 'mongoose';
const db = mongoose.createConnection(database); // 保留基础连接

// 封装动态生成模型的函数
export function getTxModel(network, dex) {
  // 获取指定network的数据库实例
  const targetDb = db.useDb(network);
  
  // 检查模型是否已存在,避免重复创建
  if (targetDb.models[`TX_${network}_${dex}`]) {
    return targetDb.models[`TX_${network}_${dex}`];
  }

  // 基础Schema结构和原代码一致
  const txSchema = new mongoose.Schema({
    uniquePoint: {
      type: String,
      required: true,
      index: true,
      unique: true,
    },
    pairAddress: {
      type: String,
      required: true,
    }
  }, { collection: dex }); // 动态指定集合名

  // 创建带唯一标识的模型并返回
  return targetDb.model(`TX_${network}_${dex}`, txSchema);
}

修改后的保存逻辑

import { getTxModel } from '../models/dynamicTxModel.js'; // 引入动态模型函数

export function saveTX(data, network, dex) {
  try {
    // 动态获取对应network和dex的模型
    const Transactions = getTxModel(network, dex);
    const newTX = new Transactions(data);
    
    newTX.save((err) => {
      if (err) {
        if (err.code === 11000) return; // 处理唯一键重复的情况
        console.log(err, data.pairAddress);
      }
    });
  } catch (err) {
    // 可按需添加错误日志逻辑
  }
}

使用示例

调用保存函数时直接传入目标数据库和集合名称即可:

// 保存到BSC数据库的PCS集合
saveTX(txData, 'BSC', 'PCS');
// 保存到ETH数据库的Uniswap集合
saveTX(txData, 'ETH', 'Uniswap');

内容的提问来源于stack exchange,提问作者Mayga Fatmawati

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 08:30:46