正确的方法来导入json文件到mongo

我一直在试图用一些导入的数据来使用mongo,但是我无法正确使用我的文档描述。

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

mongoimport -d test -c example data.json 

我注意到,尽pipe为每个商店创build了一个对象,但是我所有的文档都被导入到一个独特的对象中。

这就是为什么当我试图find一家商店或任何我想要查询的时候,所有的文档都会被返回。

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

我想能够查询数据库获取产品的ID使用点符号类似于:

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

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

文档指出:

该实用程序采用每行包含1个JSON / CSV / TSVstring的单个文件并插入它。

在你正在使用的结构中 – 假设错误的要点是固定的 – 你基本上只input一个只有shops字段的文档。

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

 mongoimport -d test -c shops data.json 

然后你可以像这样查询:

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

有一个参数--jsonArray

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

使用这个选项,你可以给它一个数组,所以你只需要去除外部对象的语法,即开始的所有内容,直到包括"shops" :}结尾。

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

 ./jq '.shops' shops.json 

从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/

导入一个JSON

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