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的官方文档。

因此,您可以使用具有适当格式(十六进制数)和长度的任何内容为记录创建自己的对象 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 回答