Proper way to import json file to mongo

2019-01-07 09:53发布

I've been trying to use mongo with some data imported, but I'm not able to use it properly with my document description.

This is an example of the .json I import using mongoimport: https://gist.github.com/2917854

mongoimport -d test -c example data.json

I noticed that all my document it's imported to a unique object in spite of creating one of object for each shop.

That's why when I try to find a shop or anything I want to query, all the document is returned.

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

I want to be able to query the db to obtain products by the id using dot notation something similar to:

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

The problem is that all the document is imported like a single object. The question is: How
do I need to import the object to obtain my desired result?

4条回答
可以哭但决不认输i
2楼-- · 2019-01-07 10:16

There is a parameter --jsonArray:

Accept import of data expressed with multiple MongoDB document within a single JSON array

Using this option you can feed it an array, so you only need to strip the outer object syntax i.e. everything at the beginning until and including "shops" :, and the } at the end.

Myself I use a little tool called jq that can extract the array from command line:

./jq '.shops' shops.json
查看更多
Lonely孤独者°
3楼-- · 2019-01-07 10:30

IMPORT FROM JSON

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

JSON format should be in this format. (Array of Objects)

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

IMPORT FROM CSV

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

More Info

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

查看更多
戒情不戒烟
4楼-- · 2019-01-07 10:31

Docs note that:

This utility takes a single file that contains 1 JSON/CSV/TSV string per line and inserts it.

In the structure you are using -assuming the errors on the gist are fixed- you are essentially importing one document with only shops field.

After breaking the data into separate shop docs, import using something like (shops being the collection name, makes more sense than using example):

mongoimport -d test -c shops data.json

and then you can query like:

db.shops.find({"name":x,"categories.type":"shirts"})
查看更多
Lonely孤独者°
5楼-- · 2019-01-07 10:38

Importing a JSON

The command mongoimport allows us to import human readable JSON in a specific database & a collection. To import a JSON data in a specific database & a collection, type mongoimport -d databaseName -c collectionName jsonFileName.json

查看更多
登录 后发表回答