MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Diff() tra due raccolte in MongoDB

Un paio di suggerimenti:

Potresti usare una combinazione di URL e data di accesso (almeno parte dell'oggetto datetime) come _id per questi oggetti poiché da quello che posso dire hai intenzione di raschiare ogni URL una volta al mese.

Esempio:

{
    "_id": {
        "url": "www.google.com",
        "date": ISODate("2013-03-01"),
    },
    // Other attributes
}

Ciò produce prestazioni, unicità e query dividendi (vedi questo post del blog di 4 quadrati ). Potresti interrogare facendo qualcosa come:

db.collection.find({
    "_id": {
        "$gte": {
            "url": yourUrl,
            "date": rangeStart
         },
         "$lt": {
            "url": yourUrl,
            "date": rangeEnd
         },
    }
})

Il che produce risultati eccellenti e ben ordinati (per URL E POI per data, che sembra essere proprio quello che desideri). Puoi anche usare questo indice per eseguire query coperte (sul campo _id) se vuoi solo un bel set di tutti gli URL e i mesi che hai raschiato (questo potrebbe aiutarti a passare attraverso ogni URL uno alla volta) .

Se hai attributi specifici del documento che ti interessa confrontare (headers.server per esempio) e un confronto specifico che vuoi fare per loro (cercando ad esempio qualsiasi incremento nei numeri di versione), userei una specie di regex per afferrare gli elementi rilevanti per il numero di versione (uno veloce e sporco potrebbe semplicemente recuperare tutto elementi numerici) e rappresentarli graficamente per ciascun URL (presumo che ciò ti consentirà di visualizzare le modifiche al software del server nel tempo). Potresti facilmente segnalare ogni volta che uno di questi attributi è cambiato scansionandoli in ordine e attivando qualche evento quando le stringhe non erano identiche (magari riportando la modifica o la parte numerica della modifica).