我一直在尝试使用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"}
问题是所有文档都像单个对象一样导入。问题是:如何
我是否需要导入对象才能获得所需的结果?
答案 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
更多信息
答案 3 :(得分:1)
命令mongoimport
允许我们在特定数据库中导入人类可读JSON
&一个集合。要在特定数据库中导入JSON
数据&一个集合,键入mongoimport -d databaseName -c collectionName jsonFileName.json