No description
  • JavaScript 68.5%
  • CSS 23.2%
  • HTML 8%
  • Dockerfile 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
cpolasipos f24784e4c2 fixed
2026-03-19 13:02:48 +01:00
public feat: Aggiungi supporto per visualizzazioni multiple (tabella, JSON, tree) e migliora la gestione dell'anteprima 2026-03-03 15:43:10 +01:00
.env.example feat: Aggiungi gestione delle sessioni con express-session e supporto per connessioni MongoDB per sessione 2026-03-03 15:53:43 +01:00
.gitignore first commit 2026-02-05 13:01:26 +01:00
docker-compose.yml first commit 2026-02-05 13:01:26 +01:00
Dockerfile first commit 2026-02-05 13:01:26 +01:00
package-lock.json feat: Aggiungi gestione delle sessioni con express-session e supporto per connessioni MongoDB per sessione 2026-03-03 15:53:43 +01:00
package.json fixed 2026-03-19 13:02:48 +01:00
README.md first commit 2026-02-05 13:01:26 +01:00
server.js fixed 2026-03-19 13:02:48 +01:00

🔀 MongoDB Data Mover

Applicazione web per spostare dati tra due database MongoDB differenti con filtri avanzati.

Funzionalità

  • 🌳 Struttura Database ad Albero: Visualizza contemporaneamente due database MongoDB con tutte le collection e il conteggio documenti

  • 📥 Database Sorgente: Connetti al database di origine per leggere i dati

  • 📤 Database Destinazione: Connetti a un database separato per scrivere i dati

  • 🔍 Selezione Collection Interattiva: Clicca direttamente sull'albero per selezionare le collection

  • 📝 Campi Liberi: Aggiungi filtri personalizzati su qualsiasi campo del documento

  • 📅 Filtro Date: Seleziona un intervallo di date basato sul timestamp dell'ObjectId

  • 🔄 Spostamento Dati: Sposta i documenti tra database diversi evitando duplicati

  • 📊 Statistiche: Visualizza il risultato dell'operazione con dettagli completi

Requisiti

  • Node.js (v14 o superiore)
  • MongoDB (qualsiasi versione)
  • Connessione a due database (sorgente e destinazione)

Installazione

  1. Clona o scarica il progetto

  2. Installa le dipendenze:

npm install
  1. Configura le connessioni ai database:

Copia il file .env.example in .env:

cp .env.example .env

Modifica il file .env con le credenziali dei due database:

MONGODB_SOURCE_URI=mongodb://username:password@host:port/source_db
MONGODB_TARGET_URI=mongodb://username:password@host:port/target_db
PORT=3000

⚠️ IMPORTANTE: Le connection string DEVONO includere il nome del database dopo l'host/porta (es: /source_db, /target_db). Se non specifichi il database, l'applicazione non potrà leggere le collection.

Esempi di connection string:

  • Locale: mongodb://localhost:27017/database
  • Con autenticazione: mongodb://user:password@localhost:27017/database
  • Replica set: mongodb://user:password@host1:27017,host2:27017,host3:27017/database?replicaSet=myReplicaSet
  • Atlas: mongodb+srv://user:password@cluster.mongodb.net/database

⚠️ IMPORTANTE: Devi configurare due database diversi (sorgente e destinazione).

  1. Avvia il server:
npm start

Per lo sviluppo con auto-reload:

npm run dev
  1. Apri il browser: Visita http://localhost:3000

Come Funziona

1. Visualizza la Struttura Database

  • La struttura ad albero mostra entrambi i database contemporaneamente
  • 📥 SINISTRA: Database SORGENTE (da cui leggere i dati)
  • 📤 DESTRA: Database DESTINAZIONE (dove scrivere i dati)
  • Ogni collection mostra il numero di documenti contenuti

2. Selezione Collection

  • Metodo 1: Clicca direttamente su una collection nell'albero
  • Metodo 2: Usa le select dropdown
  • Le collection possono avere lo stesso nome ma appartenere a database diversi

4. Campi Liberi (Opzionale)

Aggiungi filtri personalizzati su qualsiasi campo del documento:

  • Clicca su "+ Aggiungi Campo" per aggiungere nuovi filtri
  • Inserisci il nome del campo e il valore desiderato
  • Rimuovi i campi non necessari con il pulsante "✕"

5. Filtro Date

Seleziona l'intervallo di date:

  • Data Inizio: Data di inizio (inclusa)
  • Data Fine: Data di fine (inclusa)

La data viene estratta automaticamente dal timestamp dell'ObjectId _id.

6. Spostamento Dati

Clicca su "Sposta Dati" per avviare l'operazione. L'applicazione:

  1. Legge i documenti dal database SORGENTE che soddisfano i filtri
  2. Filtra per data basata sull'ObjectId
  3. Scrive i documenti nel database DESTINAZIONE
  4. Salta i documenti con _id già presente nella destinazione
  5. Mostra le statistiche complete

Dettagli Tecnici

Estrazione Data da ObjectId

L'estrazione della data avviene automaticamente dall'ObjectId MongoDB:

const timestamp = new ObjectId(doc._id).getTimestamp();

Prevenzione Duplicati

L'applicazione controlla se un documento con lo stesso _id esiste già nella destinazione:

const existing = await targetCol.findOne({ _id: doc._id });
if (!existing) {
  await targetCol.insertOne(doc);
}

Filtri Combinati

Tutti i filtri vengono combinati con AND logico:

{
  hierarchy: { company: "DEMO", brand: "DEMO" },
  campoPersonalizzato: "valore"
}

Due Connessioni MongoDB

L'applicazione mantiene due connessioni separate:

  • sourceClient: Connessione al database sorgente (solo lettura)
  • targetClient: Connessione al database destinazione (scrittura)

API Endpoints

GET /api/database-structure

Restituisce la struttura completa di entrambi i database.

Risposta:

{
  "success": true,
  "source": {
    "database": "mongodb://...",
    "collections": [
      { "name": "collection1", "count": 1000 },
      { "name": "collection2", "count": 500 }
    ]
  },
  "target": {
    "database": "mongodb://...",
    "collections": [
      { "name": "collection1", "count": 200 },
      { "name": "collection2", "count": 150 }
    ]
  }
}

GET /api/source-collections

Restituisce tutte le collection del database sorgente.

GET /api/target-collections

Restituisce tutte le collection del database destinazione.

POST /api/move-data

Sposta i dati tra collection.

Body:

{
  "sourceCollection": "source",
  "targetCollection": "target",
  "hierarchy": {
    "company": "DEMO",
    "brand": "DEMO",
    "pdv": "110"
  },
  "freeFields": {
    "status": "active"
  },
  "startDate": "2024-01-01",
  "endDate": "2024-01-31"
}

Risposta:

{
  "success": true,
  "stats": {
    "totalFound": 100,
    "moved": 95,
    "skipped": 5,
    "errors": 0
  },
  "errors": []
}

Struttura del Progetto

moveData/
├── server.js              # Server Express con due connessioni MongoDB
├── package.json           # Dipendenze e script
├── .env.example           # Template configurazione due database
├── .env                   # Configurazione (da creare)
├── README.md              # Documentazione
├── .gitignore             # File ignorati da Git
└── public/
    ├── index.html          # Interfaccia con struttura ad albero
    ├── style.css           # Stili responsive
    └── app.js              # Logica frontend con sincronizzazione

Troubleshooting

Errore di connessione a MongoDB

  • Verifica che MONGODB_SOURCE_URI e MONGODB_TARGET_URI nel file .env siano corretti
  • Controlla che entrambi i database siano accessibili dalla tua rete
  • Verifica le credenziali (username/password) per entrambi i database
  • Assicurati di avere i permessi necessari su entrambi i database

Collection non visibili

  • Assicurati di avere i permessi per leggere le collection su entrambi i database
  • Verifica che le connection string puntino ai database corretti

Nessun documento trovato

  • Verifica i filtri impostati
  • Controlla che la data sia nell'intervallo corretto
  • Usa un client MongoDB (es: Compass) per verificare i dati nel database sorgente

Documenti saltati

  • È normale: i documenti con _id già presente nella destinazione vengono saltati
  • Se vuoi sovrascrivere, devi prima cancellare i documenti dalla destinazione

Problemi di sincronizzazione albero/select

  • Refresha la pagina per ricaricare la struttura database
  • Se selezioni una collection dall'albero, la select si aggiornerà automaticamente
  • Se selezioni dalla select, l'albero si aggiornerà automaticamente

Note di Sicurezza

⚠️ IMPORTANTE: Questa applicazione modifica direttamente i database configurati.

  • Database Sorgente: Solo in LETTURA (nessun dato viene modificato)
  • Database Destinazione: In SCRITTURA (i dati vengono aggiunti)
  • Testa sempre prima su database di staging
  • Fai un backup del database di destinazione prima di operazioni critiche
  • Non esporre il server su internet senza autenticazione aggiuntiva
  • Proteggi il file .env e non includerlo nel controllo versione
  • I documenti vengono spostati senza modifiche originali
  • I documenti duplicati (stesso _id) vengono saltati, non sovrascritti

Licenza

MIT

Supporto

Per problemi o domande, contatta lo sviluppatore.