41

我一直在尝试使用 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

4 回答 4

37

文档指出:

此实用程序采用一个包含每行 1 个 JSON/CSV/TSV 字符串的文件并将其插入。

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

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

mongoimport -d test -c shops data.json

然后你可以像这样查询:

db.shops.find({"name":x,"categories.type":"shirts"})
于 2012-06-12T15:28:43.543 回答
23

有一个参数--jsonArray

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

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

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

./jq '.shops' shops.json
于 2013-05-21T19:06:58.580 回答
11

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

于 2016-10-29T17:40:21.967 回答
1

导入 JSON

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

于 2016-08-29T16:34:20.007 回答