使用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条目,您有两种语法选项:

  1. 具有有效昏迷位置的对象数组和强制性的–jsonArray标志

     [ {obj1}, {obj2}, {obj3} ] 
  2. 使用具有基本不正确的JSON格式的文件(即,在JSON对象实例之间缺less&没有–jsonArray标志

     {obj1} {obj2} {obj3} 

如果你只想插入一个数组(即数组作为数据库的顶级公民),我认为这是不可能的,也是无效的,因为mongoDB定义支持将文档作为之后映射到JSON对象的顶级对象。 换句话说,你必须像ALAN WARD指出的那样将你的数组封装到JSON对象中。