Quelques suggestions :
Vous pouvez utiliser une combinaison d'URL et de date d'accès (au moins une partie de l'objet datetime) comme _id pour ces objets car d'après ce que je peux vous dire, prévoyez de gratter chaque URL une fois par mois.
Exemple :
{
"_id": {
"url": "www.google.com",
"date": ISODate("2013-03-01"),
},
// Other attributes
}
Cela donne des performances, un caractère unique et des dividendes de requêtes (voir cet article de blog 4sq ). Vous pouvez interroger en faisant quelque chose comme :
db.collection.find({
"_id": {
"$gte": {
"url": yourUrl,
"date": rangeStart
},
"$lt": {
"url": yourUrl,
"date": rangeEnd
},
}
})
Ce qui donne d'excellents résultats bien triés (par URL PUIS par date, ce qui semble être exactement ce que vous voulez). Vous pouvez également utiliser cet index pour effectuer des requêtes couvertes (sur le champ _id) si vous voulez juste un bon ensemble de toutes les URL et des mois que vous avez grattés (cela pourrait vous permettre de parcourir chaque URL une à la fois) .
Si vous avez des attributs spécifiques du document que vous souhaitez comparer (headers.server
par exemple) et une comparaison spécifique que vous voulez faire pour eux (recherche de tout incrément dans les numéros de version par exemple), j'utiliserais une sorte de regex pour saisir les éléments pertinents au numéro de version (un rapide et sale pourrait simplement récupérer tous éléments numériques) et représentez-les graphiquement pour chaque URL (je suppose que cela vous permettrait de visualiser les modifications apportées au logiciel serveur au fil du temps). Vous pouvez tout aussi facilement signaler chaque modification de l'un de ces attributs en les analysant dans l'ordre et en déclenchant un événement lorsque les chaînes ne sont pas identiques (peut-être en signalant ensuite la modification ou la partie numérique de la modification).