使用mongoimport从文件导入json到mongodb
我有我的json_file.json像这样:
[ { "project": "project_1", "coord1": 2, "coord2": 10, "status": "yes", "priority": 7 }, { "project": "project_2", "coord1": 2, "coord2": 10, "status": "yes", "priority": 7 }, { "project": "project_3", "coord1": 2, "coord2": 10, "status": "yes", "priority": 7 } ]
当我运行以下命令将其导入到mongodb中时:
mongoimport --db my_db --collection my_collection --file json_file.json
我得到以下错误:
Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
如果我添加–jsonArray标志的命令我导入像这样:
imported 3 documents
而不是原始文件中显示的具有json格式的一个文档。
如何在上面显示的文件中以原始格式将json导入到mongodb中?
也许下面的MongoDB项目博客引用可以帮助您深入了解如何在Mongo中使用数组:
http://blog.mongolab.com/2013/04/thinking-about-arrays-in-mongodb/
我会框架你的import,否则,并且:
a)按照您的说法,分别将三个不同的对象导入到集合中,使用–jsonArray标志; 要么
b)将完整的数组封装在单个对象中,例如以这种方式:
{ "mydata": [ { "project": "project_1", ... "priority": 7 } ] }
HTH。
mongoimport
工具有一个选项:
--jsonArray
将input源视为JSON数组
或者可以从文件导入
包含相同的数据格式
db.collection.find()
命令的结果。
这里是来自university.mongodb.com课件的例子
一些内容从grades.json
:
{ "_id" : { "$oid" : "50906d7fa3c412bb040eb577" }, "student_id" : 0, "type" : "exam", "score" : 54.6535436362647 } { "_id" : { "$oid" : "50906d7fa3c412bb040eb578" }, "student_id" : 0, "type" : "quiz", "score" : 31.95004496742112 } { "_id" : { "$oid" : "50906d7fa3c412bb040eb579" }, "student_id" : 0, "type" : "homework", "score" : 14.8504576811645 }
如你看到的,
没有数组使用和
文件之间没有逗号分隔符。
我发现,最近,
这符合the JSON Lines text
格式。
就像在apache.spark.sql.DataFrameReader.json()
方法中使用的一样。
我今天面临相反的问题,我的结论是:
如果您希望一次插入JSON对象数组,那么每个数组条目将被视为单独的dtabase条目,您有两种语法选项:
-
具有有效昏迷位置的对象数组和强制性的–jsonArray标志
[ {obj1}, {obj2}, {obj3} ]
-
使用具有基本不正确的JSON格式的文件(即
,
在JSON对象实例之间缺less&没有–jsonArray标志{obj1} {obj2} {obj3}
如果你只想插入一个数组(即数组作为数据库的顶级公民),我认为这是不可能的,也是无效的,因为mongoDB定义支持将文档作为之后映射到JSON对象的顶级对象。 换句话说,你必须像ALAN WARD指出的那样将你的数组封装到JSON对象中。