Algumas sugestões:
Você pode usar uma combinação de url e a data acessada (pelo menos parte do objeto datetime) como o _id para esses objetos, pois pelo que posso dizer, você planeja raspar cada url uma vez por mês.
Exemplo:
{
"_id": {
"url": "www.google.com",
"date": ISODate("2013-03-01"),
},
// Other attributes
}
Isso gera dividendos de desempenho, exclusividade e consulta (consulte esta postagem de blog de 4 sq ). Você poderia consultar fazendo algo como:
db.collection.find({
"_id": {
"$gte": {
"url": yourUrl,
"date": rangeStart
},
"$lt": {
"url": yourUrl,
"date": rangeEnd
},
}
})
O que produz resultados excelentes e bem classificados (por url ENTÃO por data, que parece ser exatamente o que você deseja). Você também pode usar esse índice para realizar consultas cobertas (no campo _id) se quiser apenas um bom conjunto de todos os URLs e meses que você raspou (isso pode configurar bem para percorrer cada URL um de cada vez) .
Se você tiver atributos específicos do documento que deseja comparar (
headers.server
por exemplo) e uma comparação específica que você deseja fazer para eles (procurando qualquer incremento nos números de versão, por exemplo), eu usaria algum tipo de regex para pegar os elementos relevantes para o número da versão (um rápido e sujo pode simplesmente recuperar todos elementos numéricos) e grafe-os para cada URL (suponho que isso permitiria que você visualize as alterações no software do servidor ao longo do tempo). Você poderia facilmente relatar sempre que qualquer um desses atributos fosse alterado, verificando-os em ordem e desencadeando algum evento quando as strings não fossem idênticas (talvez então relatando a alteração ou a parte numérica da alteração).