2013-03-18 68 views
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响应,然后解析该输出入的MongoDB与JSON.stringify(即变换东西进入JSON文档格式的方法)。出于某种原因,我得到MongoDB中一些奇怪的输出,它是这样的:插入JSON.Stringified数据转换成的MongoDB

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

我觉得是做的是,它被解释每个字符作为一个新的变量。我在代码中做了什么错误?

+3

我在这里有点困惑:你为什么要存储一个JSON字符串,而不是文档本身?正如Mongo希望你提供一个_document_一样,它对所提供的字符串做的只是一个更不明智的事情 - 将它解析为一个数组。你至少应该存储它,像...... db.collection.save({res:JSON.stringify(obj,null,2)});'。但坦率地说,您正在尝试在这里完成Mongo的工作:为什么不在输出时格式化这个对象? – raina77ow 2013-03-18 14:59:43

+0

感谢您的回复。我想,让JSON.stringify()格式化导入会更方便。在我的情况下你会做什么?请记住,每个“网站”有三个对象'url','statusCode'和'headers'。 “url”是每个“网站”响应的主键。 – theGreenCabbage 2013-03-18 15:06:15

回答

8

为什么使得obj变得更加丰富? API期望一个JavaScript对象。

只要做到:

db.collection.save(obj); 
+0

我的上帝。让我试试这个。 – theGreenCabbage 2013-03-18 15:13:05

+0

我是一只很傻的鹅。这工作。非常感谢。 – theGreenCabbage 2013-03-18 15:14:37

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)});?

1

我在流星的项目有同样的问题。 “响应”是一个包含json格式数据的字符串。 “保存”方法不起作用。我简单地创建了一个新文档:

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