2012-06-12 30 views
38

Tôi đã cố gắng sử dụng mongo với một số dữ liệu được nhập, nhưng tôi không thể sử dụng nó đúng cách với mô tả tài liệu của mình.Cách thích hợp để nhập tệp json vào mongo

Đây là một ví dụ về .json tôi nhập khẩu sử dụng mongoimport: https://gist.github.com/2917854

mongoimport -d test -c example data.json 

tôi nhận thấy rằng tất cả các tài liệu của tôi nó nhập khẩu vào một đối tượng duy nhất mặc dù tạo ra một trong những đối tượng cho mỗi cửa hàng.

Đó là lý do tại sao khi tôi tìm một cửa hàng hoặc bất kỳ thứ gì tôi muốn truy vấn, tất cả tài liệu đều được trả về.

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

Tôi muốn để có thể truy vấn db để có được sản phẩm của id sử dụng một cái gì đó ký hiệu dấu chấm tương tự như:

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

Vấn đề là tất cả các tài liệu được nhập khẩu như một đối tượng duy nhất. Câu hỏi là: Làm thế nào
tôi có cần phải nhập khẩu đối tượng để có được kết quả mong muốn của mình không?

+1

liên kết của bạn có thêm 'a' ở cuối –

+0

@ ErenGüven Oops! Cảm ơn bạn đã cảnh báo! ;) – Nahikariii

Trả lời

36

Docs lưu ý rằng:

tiện ích này có một tập tin duy nhất có chứa 1 JSON/CSV/TSV chuỗi trên mỗi dòng và chèn nó.

Trong cấu trúc bạn đang sử dụng -assuming các lỗi trên gist là cố định, bạn chủ yếu nhập một tài liệu chỉ với trường shops.

Sau khi phá vỡ các dữ liệu vào tài liệu cửa hàng riêng biệt, nhập khẩu sử dụng một cái gì đó tương tự (cửa hàng là tên bộ sưu tập, có ý nghĩa hơn so với sử dụng example):

mongoimport -d test -c shops data.json 

và sau đó bạn có thể truy vấn như:

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

có một tham số --jsonArray:

Chấp nhận nhập dữ liệu được thể hiện với nhiều tài liệu MongoDB trong một arr JSON đơn ay

Sử dụng tùy chọn này bạn có thể cho nó ăn mảng, vì vậy bạn chỉ cần tách cú pháp đối tượng ngoài tức là mọi thứ ở đầu cho đến và bao gồm "shops" :} ở cuối.

Bản thân tôi sử dụng một công cụ nhỏ gọi là jq có thể trích xuất các mảng từ dòng lệnh:

./jq '.shops' shops.json 
0

Nhập JSON

Lệnh mongoimport cho phép chúng ta nhập khẩu human readable JSON trong một cơ sở dữ liệu cụ thể & một bộ sưu tập.Để nhập một JSON dữ liệu trong một cơ sở dữ liệu cụ thể & một bộ sưu tập, gõ mongoimport -d databaseName -c collectionName jsonFileName.json

8

NHẬP KHẨU TỪ JSON

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

định dạng JSON phải ở định dạng này. (Mảng các đối tượng)

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

NHẬP KHẨU TỪ CSV

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

More Info

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

Các vấn đề liên quan