MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Diff() zwischen zwei Sammlungen in MongoDB

Ein paar Vorschläge:

Sie könnten eine Kombination aus URL und dem Zugriffsdatum (zumindest ein Teil des datetime-Objekts) als _id für diese Objekte verwenden, da Sie, soweit ich das beurteilen kann, planen, jede URL einmal im Monat zu scrapen.

Beispiel:

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

Dies führt zu Leistung, Einzigartigkeit und Abfragedividenden (siehe dieser 4-Quadratmeter-Blogbeitrag ). Sie könnten so etwas abfragen wie:

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

Das ergibt hervorragende, gut sortierte (nach URL, DANN nach Datum, was genau das zu sein scheint, was Sie wollen) Ergebnisse. Sie können diesen Index auch verwenden, um abgedeckte Abfragen (über das Feld _id) durchzuführen, wenn Sie nur eine schöne Sammlung aller URLs und Monate haben möchten, die Sie gekratzt haben (dies könnte Sie gut einrichten, um jede URL einzeln durchzugehen). .

Wenn Sie bestimmte Attribute des Dokuments haben, die Sie vergleichen möchten (headers.server zum Beispiel) und einen bestimmten Vergleich, den Sie für sie durchführen möchten (zum Beispiel nach einer Erhöhung der Versionsnummern suchen), würde ich eine Art Regex verwenden, um die Elemente zu erfassen, die für die Versionsnummer relevant sind (ein schneller und schmutziger kann einfach alle abrufen numerische Elemente) und stellen Sie sie für jede URL grafisch dar (ich nehme an, dass Sie damit Änderungen an der Serversoftware im Laufe der Zeit visualisieren können). Sie könnten genauso einfach melden, wenn sich eines dieser Attribute geändert hat, indem Sie sie der Reihe nach scannen und ein Ereignis auslösen, wenn die Zeichenfolgen nicht identisch waren (vielleicht dann die Änderung oder den numerischen Teil der Änderung melden).