4

私は研究をしました。これが重複した質問である場合はお詫び申し上げますが、他の質問の解決策は実際には自分に合っていなかったため、新しい質問をしました。

2つのコレクションを比較するためのJavascriptの最良の方法は何ですか?

私はこのMongoドキュメント形式でこれらのヘッダーを何千も持っています:

{
    "url": "google.com",
    "headers": {
        "location": "http://www.google.com/",
        "content-type": "text/html; charset=UTF-8",
        "date": "Mon, 25 Mar 2013 18:12:08 GMT",
        "expires": "Wed, 24 Apr 2013 18:12:08 GMT",
        "cache-control": "public, max-age=2592000",
        "server": "gws",
        "content-length": "219",
        "x-xss-protection": "1; mode=block",
        "x-frame-options": "SAMEORIGIN"
    }
}

今日はスクレーパーを走らせました。将来的には、もう一度実行して、2番目のコレクションに保存します。serverさらに、3つの特定のヘッダーオブジェクト、つまり、、、x-aspnet-versionおよびを比較しx-powered-byて、整数の増分があるかどうかを検出できるようにしたいと思います。

2つのコレクションを反復処理してdiff()を実行するための最良の方法は何ですか?

私はそれを正しくやっていますか?どんな提案でも本当にありがたいです。

4

1 に答える 1

4

いくつかの提案:

これらのオブジェクトの_idとして、URLとアクセスされた日付(少なくともdatetimeオブジェクトの一部)の組み合わせを使用できます。これは、月に1回各URLをスクレイプすることを計画しているためです。

例:

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

これにより、パフォーマンス、一意性、およびクエリの配当が得られます(この4sqブログ投稿を参照)。次のようなことをしてクエリを実行できます。

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

これにより、優れた、適切にソートされた(URL、日付、および希望どおりのように見える)結果が得られます。取得したすべてのURLと月の適切なセットが必要な場合は、このインデックスを使用して(_idフィールドで)対象クエリを実行することもできます(これにより、各URLを一度に1つずつ確認できるように設定できます) 。

比較したいドキュメントの特定の属性(headers.serverたとえば)とそれらに対して実行したい特定の比較(たとえばバージョン番号の増分を探す)がある場合、私はある種の正規表現を使用して取得しますバージョン番号に関連する要素(すばやく汚いものはすべての数値要素を取得するだけかもしれません)とURLごとにグラフ化します(これにより、サーバーソフトウェアへの変更を時間の経過とともに視覚化できると思います)。これらの属性のいずれかが変更された場合は、それらを順番にスキャンし、文字列が同一でないときにイベントを発生させることで、同じように簡単に報告できます(おそらく、変更または変更の数値部分を報告します)。

于 2013-03-25T23:49:34.553 に答える