在Mongodb v2.2中当我尝试将一个简单的json文档文件从我的.json文件导入到空集合中时,我会导入13个对象。这就是我正在做的事情。
这是数据(我缩短了字段名称以保护数据):
[
{
"date" : ISODate("2012-08-01T00:00:00Z"),
"start" : ISODate("2012-08-01T00:00:00Z"),
"xxx" : 1,
"yyt" : 5,
"p" : 6,
"aam" : 20,
"dame" : "denon",
"33" : 10,
"xxt" : 8,
"col" : 3,
"rr" : [
{ "name" : "Plugin 1", "count" : 1 },
{ "name" : "Plugin 2", "count" : 1 },
{ "name" : "Plugin 3", "count" : 1 }
],
"xkx" : { "y" : 0, "n" : 1 },
"r" : { "y" : 0, "n" : 1 },
"po" : { "y" : 0, "n" : 1 },
"pge" : { "posts" : 0, "pages" : 1 },
"pol" : { "y" : 0, "n" : 1 },
"lic" : { "y" : 0, "n" : 1 },
"count" : 30,
"tx" : [
{ "zone" : -7, "count" : 1 }
],
"yp" : "daily",
"ons" : [
{ "version" : "9.6.8", "count" : 1 }
],
"ions" : [
{ "version" : "10.0.3", "count" : 1 }
]
}
]
使用此命令:
mongoimport --db development_report --collection xxx --username xxx --password xxx --file /Users/Alex/Desktop/daily2.json --type json --jsonArray --stopOnError --journal
我得到了这个响应的回复:
Mon Sep 3 12:09:12 imported 13 objects
这13个新文档最终出现在集合中而不是一个:
{ "_id" : ObjectId("5044114815e24c08bcdc988e") }
{ "_id" : ObjectId("5044114815e24c08bcdc988f"), "name" : "Plugin 1", "count" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9890"), "name" : "Plugin 2", "count" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9891"), "name" : "Plugin 3", "count" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9892"), "y" : 0, "n" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9893"), "y" : 0, "n" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9894"), "y" : 0, "n" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9895"), "posts" : 0, "pages" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9896"), "y" : 0, "n" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9897"), "y" : 0, "n" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9898"), "zone" : -7, "count" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc9899"), "version" : "9.6.8", "count" : 1 }
{ "_id" : ObjectId("5044114815e24c08bcdc989a"), "version" : "10.0.3", "count" : 1 }
我做错了什么?
答案 0 :(得分:5)
您遇到的问题是文档开头的两个ISODate字段。
JSON没有任何“日期”类型,因此它不处理文档中的ISODate字段。你需要像这样转换它们:
[
{
"date" : { "$date" : 1343779200000 },
"start" : { "$date" : 1343779200000 },
...
您的导入将有效。
之所以出现这种情况,是因为MongoDB处理的类型多于JSON规范中提供的类型。您可以在documentation中查看更多信息。还有一张打开的票,让MongoImport处理MongoDB所做的所有格式here以及更多细节here
答案 1 :(得分:1)
这真令人沮丧;我无法快速使用导入工具,所以我使用mongo客户端中的load()
函数来加载插入我的记录的脚本。
> load('/Users/Alex/Desktop/daily.json');
我显然必须修改json文件以包含如下所示的insert命令:
>db.mycollection.insert(
{ DOCUMENT 1 },
...
{ DOCUMENT N }
);
答案 2 :(得分:0)
这真的很晚了,但是如果它可以帮助其他人 - 你不应该传递JSON数组。只需每行列出1个JSON文档,每行将创建一个单独的文档。下面的文件将插入2个文件:
{ "date" : { "$date": 1354320000000 }, "xxx" : 1, "yyt" : 5, ... }
{ "date" : { "$date": 1354320000000 }, "xxx" : 2, "yyt" : 6, ... }