0

Node.js を使用して特定のサイトからヘッダーを要求するスクリプトがあります。

var http = require("http");
var fs = require("fs");

var hostNames = ['www.google.com'];

var options = {
            host: hostNames[i],
            path: '/'
    };

http.get(options, function(res) {

        var obj = {};
        obj.statusCode = res.statusCode;
        obj.headers = res.headers;

        console.log(JSON.stringify(obj, null, 4));
    })

URL「www.google.com」の出力は、以下に添付されます。

{
    "statusCode": 200,
    "headers": {
        "date": "Mon, 04 Mar 2013 16:43:39 GMT",
        "expires": "-1",
        "cache-control": "private, max-age=0",
        "content-type": "text/html; charset=ISO-8859-1",
        "set-cookie": [
            "PREF=ID=cfa31a2cae817ca6:FF=0:TM=1362415419:LM=1362415419:S=m-sNTevwPhFFWVpv; expires=Wed, 04-Mar-2015 16:43:39 GMT; path=/; domain=.google.com",
            "NID=67=AKMqJ9Q94GtcmF0kTOAOLgFLqz9XAnSwVe4jzzXFVhvxuxRJP_l9QEwbjR3F7d506thF9BURyGJUz5DuNTEzXesit50Dm7FlOoVuL2qGRt9XZwRMGjAlxL5heO4vIATp; expires=Tue, 03-Sep-2013 16:43:39 GMT; path=/; domain=.google.com; HttpOnly"
        ],
        "p3p": "CP=\"This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info.\"",
        "server": "gws",
        "x-xss-protection": "1; mode=block",
        "x-frame-options": "SAMEORIGIN",
        "transfer-encoding": "chunked"
    }
}

私の質問はJSONに関してです。出力をMongoDBに保存しようとしています。MongoDB は、JSON のようなドキュメントを格納します。私の理解では、SQL ベースのデータベースには主キーがあります。ここで混乱が生じます。URL、この場合は「www.google.com」を主キーとして使用したいと考えています。どうすればこれを達成できますか? JSON のような格納構造を使用するのはこれが初めてであり、私が読んだ複数の記事は、私の特定の状況には実際には当てはまりません。

データベースで「www.google.com」を検索すると、「www.google.com」の下にヘッダーが表示されるようにする予定です。わかりません - 私はまだ SQL の考え方で考えていると思います。誰かがこれについていくつかの洞察を共有できますか?

4

2 に答える 2

1

オブジェクト ID に関する公式ドキュメントは次のとおりです。

したがって、適切な形式 (16 進数) と長さの任意のものを使用してレコードの独自のオブジェクト ID を作成できるため、これは機能します。

db.names.insert({"_id": new ObjectId("012345678901234567890123"), "name" : "my name" })

しかし、これはいけません

db.names.insert({"_id": new ObjectId("my reallllly long string"), "name" : "my name" })

オブジェクト ID で使用する場合は、URL のハッシュを使用する必要があります。

ただし、mongo は別のオプションを提供します。_id フィールドをそのままにして、url の url フィールドを作成し、url フィールドにインデックスを設定します。

db.scrapedPages.ensureIndex({ 'url': 1})

更新:より具体的には、あなたの例に。プロパティを設定/変更するつもりはありません_id。mongoがそれを行います。代わりにurl、保存するドキュメントのプロパティを設定します。ここで使用するのが合理的なのは、解析しているページを定義するオプション オブジェクトです。

だから私はあなたがそのようなものになると思います(私はあなたがmongoネイティブドライバーを使用し、mongo接続が開いていることを期待しています)

var options = {
        host: hostNames[i],
        path: '/'
};

http.get(options, function(res) {
    var obj = {
       url: options.host + options.path // or whatever else is 
       statusCode : res.statusCode,
       headers : res.headers
    }
    save(obj, function(err, objects) {
       if (err) console.warn(err.message);
    })
})

function save(doc, callback) {
    var collection = new mongodb.Collection(client, 'test_collection')
     , cb = callback || function() {}
    collection.insert(doc, {safe:true}, cb);
}
于 2013-03-11T19:21:02.327 に答える
0

SQL テーブルのprimary keyは、特定の行を一意に識別するために使用される列です。mongodb_idには、主キーであるフィールドがあります。mongodb指定しない場合は自動的に追加され、ObjectId(12 バイト長の BSON 識別子) が割り当てられます。詳細はこちらで確認できます。

于 2013-03-11T19:16:16.130 に答える