【问题标题】:Inserting JSON.Stringified data into MongoDB将 JSON.Stringified 数据插入 MongoDB
【发布时间】:2013-03-06 23:13:12
【问题描述】:
var obj = {};
obj.url = hostNames[i];
obj.statusCode = res.statusCode;
obj.headers = res.headers;

db.collection.save(JSON.stringify(obj, null, 2));

我目前正在尝试通过 Node.js 请求 HTTP 响应,然后使用 JSON.stringify(将事物转换为 JSON 文档格式的方法)将该输出解析到 MongoDB。出于某种原因,我在 MongoDB 中得到了一些奇怪的输出,它是这样的:

> db.scrape.find()
{ "_id" : ObjectId("51472849650593014a3c20da"), "0" : "{", "1" : "\n", "2" : " ", "3" : " ", "4" : "\"", "5" : "u", "6" : "r", "7" : "l", "8" :

我认为它正在做的是将每个字符解释为一个新变量。我的代码做错了什么?

【问题讨论】:

  • 我有点困惑:你为什么要存储 JSON 字符串,而不是文档本身?正如 Mongo 期望您提供一个 document 一样,它对提供的字符串做了唯一更明智的事情 - 将其解析为一个数组。您至少应该将其存储为... db.collection.save({res: JSON.stringify(obj, null, 2)});。但是,坦率地说,您在这里尝试做 Mongo 的工作:为什么在输出时不格式化这个对象?
  • 感谢您的回复。我在想,让 JSON.stringify() 格式化导入会更方便。在我的情况下你会怎么做?请记住,每个“网站”有三个对象 urlstatusCodeheadersurl 是每个“网站”响应的主键。

标签: javascript json node.js http mongodb


【解决方案1】:

你检查过 JSON.stringify(obj, null, 2) 的输出了吗? 我想这会返回预期的结果。

这个错误有两个可能的原因: 存储文件的方式错误或 检索文档的方式不对

http://docs.mongodb.org/manual/tutorial/getting-started/(mongodb 入门)没有提到在调用 insert 或其他方法之前将文档转换为 json。

您是否尝试过像这样存储它 db.collection.save({'content': JSON.stringify(obj, null, 2)});?

【讨论】:

    【解决方案2】:

    为什么要对 obj 进行字符串化? API 需要一个 javascript 对象。

    只要做:

    db.collection.save(obj);
    

    【讨论】:

    • 它已被弃用。有没有其他办法?
    【解决方案3】:

    我在 Meteor 项目中遇到了同样的问题。 “response”是一个包含 json 格式数据的字符串。 “保存”方法不起作用。我只是通过以下方式创建了一个新文档:

     obj = JSON.parse(response);
     db.collection.insert(obj);
    

    【讨论】:

      猜你喜欢
      • 2018-06-14
      • 2022-01-04
      • 1970-01-01
      • 2021-06-23
      • 2014-06-29
      • 2021-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多