4
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" :

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

4

3 回答 3

8

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

做就是了:

db.collection.save(obj);
于 2013-03-18T15:11:22.287 回答
1

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

出现此错误的可能原因有两种:存储文档的方式错误或检索文档的方式错误

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

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

于 2013-03-18T15:08:42.783 回答
1

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

 obj = JSON.parse(response);
 db.collection.insert(obj);
于 2014-12-27T16:52:49.357 回答