将json文件导入mongo的正确方法

时间:2012-06-12 14:42:33

标签: json mongodb nosql

我一直在尝试使用mongo导入一些数据,但我无法在文档描述中正确使用它。

这是我使用mongoimport导入的.json示例:https://gist.github.com/2917854

mongoimport -d test -c example data.json

我注意到,尽管为每个商店创建了一个对象,我的所有文档都被导入到一个唯一的对象中。

这就是为什么当我试图找到一家商店或我要查询的任何东西时,所有文件都会被退回。

db.example.find({"shops.name":"x"})

我希望能够使用点符号查询数据库以获取id的产品类似于:

db.example.find({"shops.name":"x","categories.type":"shirts","clothes.id":"1"}

问题是所有文档都像单个对象一样导入。问题是:如何
我是否需要导入对象才能获得所需的结果?

4 个答案:

答案 0 :(得分:37)

Docs请注意:

  

此实用程序获取每行包含1个JSON / CSV / TSV字符串的单个文件并插入它。

在您正在使用的结构中 - 假设要点上的错误已修复 - 您实际上只导入一个仅包含shops字段的文档。

将数据分解为单独的商店文档后,使用类似(商店作为集合名称,比使用example更有意义)导入:

mongoimport -d test -c shops data.json

然后您可以查询:

db.shops.find({"name":x,"categories.type":"shirts"})

答案 1 :(得分:23)

有一个参数--jsonArray

接受在单个JSON数组中导入用多个MongoDB文档表示的数据

使用此选项,您可以为其提供一个数组,因此您只需要剥离外部对象语法,即开头的所有内容,直到并包括"shops" :,最后包括}

我自己使用一个名为jq的小工具,它可以从命令行中提取数组:

./jq '.shops' shops.json

答案 2 :(得分:9)

从JSON导入

mongoimport --db "databaseName" --collection "collectionName" --type json --file "fileName.json" --jsonArray

JSON格式应采用此格式。 (对象数组)

[
    { name: "Name1", msg: "This is msg 1" },
    { name: "Name2", msg: "This is msg 2" },
    { name: "Name3", msg: "This is msg 3" }
]

从CSV导入

mongoimport --db "databaseName" --collection "collectionName" --type csv --file "fileName.csv" --headerline

更多信息

https://docs.mongodb.com/getting-started/shell/import-data/

答案 3 :(得分:1)

导入JSON

命令mongoimport允许我们在特定数据库中导入人类可读JSON&一个集合。要在特定数据库中导入JSON数据&一个集合,键入mongoimport -d databaseName -c collectionName jsonFileName.json