Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mongoimport将json从文件导入mongodb_Mongodb - Fatal编程技术网

使用mongoimport将json从文件导入mongodb

使用mongoimport将json从文件导入mongodb,mongodb,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

我的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
}
]
imported 3 documents
当我运行以下命令将其导入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标志添加到导入的命令中,如下所示:

[
{
    "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
}
]
imported 3 documents
而不是原始文件中显示的json格式的文档


如何将json以上述文件中的原始格式导入mongodb?

也许以下mongodb项目博客中的参考资料可以帮助您了解阵列在Mongo中的工作方式:

否则,我将为您的导入设置框架,并且:

a) 如您所说,使用--jsonArray标志将三个不同的对象分别导入到集合中;或

b) 将整个数组封装在单个对象中,例如:

{
"mydata": 
    [
    {
          "project": "project_1",
          ...
          "priority": 7
    }
    ]
}

HTH.

mongoimport工具有一个选项:

--jsonArray
将输入源视为JSON数组

或者可以从包含与
db.collection.find()命令的结果相同的数据格式的文件导入。以下是课件中的示例,
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 }
正如您所看到的,没有使用数组,文档之间也没有逗号分隔符

我最近发现,这符合格式


就像apache.spark.sql.DataFrameReader.json()方法中使用的方法一样。

我今天遇到了相反的问题,我的结论是:

如果您希望一次插入JSON对象数组,其中每个数组条目都应被视为单独的dtabase条目,则有两种语法选项:

  • 具有有效coma位置的对象数组&--jsonArray标志

    [
      {obj1},
      {obj2},
      {obj3}
    ]
    
  • 使用JSON格式基本不正确的文件(即JSON对象实例之间缺少
    ,没有--jsonArray标志)

    {obj1}
    {obj2}
    {obj3}
    

  • 如果只希望插入数组(即作为数据库顶级公民的数组)我认为这是不可能的,也是无效的,因为mongoDB根据定义支持文档作为顶级对象,然后映射到JSON对象。换句话说,正如ALAN WARD指出的,您必须将数组包装到JSON对象中。

    错误:

    $ ./mongoimport --db bookings --collection user --file user.json
    
    2021-06-12T18:52:13.256+0530    connected to: localhost
    2021-06-12T18:52:13.261+0530    Failed: error unmarshaling bytes on document #0: JSON decoder out of sync - data changing underfoot?
    2021-06-12T18:52:13.261+0530    imported 0 documents
    
    解决方案:当您的JSON数据包含一个对象数组时,我们需要在使用下面提到的命令导入时使用--jsonArray

    $ ./mongoimport --db bookings --collection user --file user.json --jsonArray
    2021-06-12T18:53:44.164+0530    connected to: localhost
    2021-06-12T18:53:44.532+0530    imported 414 documents
    

    原始json格式映射到三个文档。非常好。感谢您的阅读。由于此json仅支持D3视觉效果,阵列将永远不会变大。因此,如您所述,简单地将整个阵列封装在单个对象中非常有效,这就是我选择的操作。如果数据需要扩展,我将更仔细地研究使用单独的对象来减少查询过程中必须扫描的数据量。干杯。谢谢即使是一个旧的答案,它确实解决了我当前的问题
    --jsonArray
    flag帮了我。谢谢。