我有这样的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
}
]
Run Code Online (Sandbox Code Playgroud)
当我运行以下命令将其导入mongodb时:
mongoimport --db my_db --collection my_collection --file json_file.json
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
Run Code Online (Sandbox Code Playgroud)
如果我将--jsonArray标志添加到我导入的命令中,如下所示:
imported 3 documents
Run Code Online (Sandbox Code Playgroud)
而不是原始文件中显示的具有json格式的一个文档.
如何在上面显示的文件中以原始格式将json导入mongodb?
Ale*_*sev 112
该mongoimport
工具有一个选项:
--jsonArray
将输入源视为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 }
Run Code Online (Sandbox Code Playgroud)
如您所见,
文档之间
没有使用数组也
没有逗号分隔符.
我最近发现,
这符合the JSON Lines text
格式.
就像在apache.spark.sql.DataFrameReader.json()
方法中使用的一样.
小智 77
也许来自MongoDB项目博客的以下参考可以帮助您深入了解数组在Mongo中的工作方式:
https://blog.mlab.com/2013/04/thinking-about-arrays-in-mongodb/
否则我会构建你的导入框架,并且:
a)使用--jsonArray标志将三个不同的对象分别导入到集合中; 要么
b)将完整数组封装在单个对象中,例如以这种方式:
{
"mydata":
[
{
"project": "project_1",
...
"priority": 7
}
]
}
Run Code Online (Sandbox Code Playgroud)
HTH.
我今天遇到了相反的问题,我的结论是:
如果您希望一次插入JSON对象数组,其中每个数组条目应被视为单独的dtabase条目,您有两种语法选项:
具有有效昏迷位置的对象数组和--jsonArray标志必须
[
{obj1},
{obj2},
{obj3}
]
Run Code Online (Sandbox Code Playgroud)使用基本上不正确的JSON格式的文件(即,
在JSON对象实例和没有--jsonArray标志之间丢失
{obj1}
{obj2}
{obj3}
Run Code Online (Sandbox Code Playgroud)如果你只希望插入一个数组(即数组作为数据库的顶级公民),我认为这是不可能的,也是无效的,因为根据定义,mongoDB支持将文档作为顶级对象,然后映射到JSON对象.换句话说,您必须像ALAN WARD指出的那样将数组包装到JSON对象中.
归档时间: |
|
查看次数: |
46723 次 |
最近记录: |