Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 查询Node.js HTTP请求/响应和URL作为此JSON格式文档的主键_Javascript_Mongodb_Database_Nosql - Fatal编程技术网

Javascript 查询Node.js HTTP请求/响应和URL作为此JSON格式文档的主键

Javascript 查询Node.js HTTP请求/响应和URL作为此JSON格式文档的主键,javascript,mongodb,database,nosql,Javascript,Mongodb,Database,Nosql,我有一个脚本,它使用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 = {}

我有一个脚本,它使用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思维。有人能分享一些关于这方面的见解吗

SQL表中的
主键是用于唯一标识特定行的列。在mongodb中,id是主键字段
mongodb
如果您没有指定它,会自动添加它,并为它分配一个
ObjectId
(12字节长的BSON标识符)。您可以查看详细信息

这里是关于对象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" })
如果要使用at对象id,则需要使用url的哈希

然而,mongo给了你另一个选择。别管_id字段,为url创建url字段,然后在url字段上设置索引

db.scrapedPages.ensureIndex({ 'url': 1})
更新:更具体到您的示例。 您不打算设置/更改
\u id
属性,mongo会为您做这件事。 相反,您要设置要保存的文档的
url
属性,这里使用的合理对象是您的options对象,因为它定义了您要解析的页面

因此,我认为您将得到类似的结果(我希望您使用mongo本机驱动程序并打开mongo连接)


请参阅我的最新答案Hi vittore。以我的输出代码为例,您能用我的示例向我演示一下如何将
\u id
和/或
'url'
合并到其中的格式吗?谢谢。具体来说,
url
字段是包含整个响应头{}还是与
statusCode
占用同一行?明白了。这看起来如何`db.users.ensureIndex({url:1},{unique:true})`您可以手动运行它,只需使用此命令连接到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);
}