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

Nah*_*iii 40 json mongodb nosql

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

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

mongoimport -d test -c example data.json
Run Code Online (Sandbox Code Playgroud)

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

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

db.example.find({"shops.name":"x"})
Run Code Online (Sandbox Code Playgroud)

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

db.example.find({"shops.name":"x","categories.type":"shirts","clothes.id":"1"}
Run Code Online (Sandbox Code Playgroud)

问题是所有文档都像单个对象一样导入.问题是:我如何
导入对象以获得我想要的结果?

Ere*_*ven 37

文件指出:

此实用程序采用单个文件,每行包含1个JSON/CSV/TSV字符串并插入它.

在您正在使用的结构中 - 假设要点上的错误是固定的 - 您实际上只导入一个带有shops字段的文档.

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

mongoimport -d test -c shops data.json
Run Code Online (Sandbox Code Playgroud)

然后你可以查询如下:

db.shops.find({"name":x,"categories.type":"shirts"})
Run Code Online (Sandbox Code Playgroud)


The*_*ail 23

有一个参数--jsonArray:

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

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

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

./jq '.shops' shops.json
Run Code Online (Sandbox Code Playgroud)


Mah*_*h K 9

从JSON导入

mongoimport --db "databaseName" --collection "collectionName" --type json --file "fileName.json" --jsonArray
Run Code Online (Sandbox Code Playgroud)

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

[
    { name: "Name1", msg: "This is msg 1" },
    { name: "Name2", msg: "This is msg 2" },
    { name: "Name3", msg: "This is msg 3" }
]
Run Code Online (Sandbox Code Playgroud)

从CSV导入

mongoimport --db "databaseName" --collection "collectionName" --type csv --file "fileName.csv" --headerline
Run Code Online (Sandbox Code Playgroud)

更多信息

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