mongoimport不能正确导入对象

时间:2012-09-03 02:17:26

标签: mongodb mongoid mongodb-.net-driver

在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 }

我做错了什么?

3 个答案:

答案 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, ... }