Помощната програма за импортиране на MongoDB – mongoimport
– въведе нов параметър, който ви позволява да импортирате CSV данни като масив.
--useArrayIndexFields
параметърът интерпретира естествените числа в полетата като индекси на масиви при импортиране на CSV или TSV файлове.
Пример
Да предположим, че имаме CSV файл, наречен tags.csv
това изглежда така:
tags.0,tags.1,tags.2,tags.3
html,css,sql,xml
Можем да импортираме това с помощта на --useArrayIndexFields
параметър, който ще предизвика mongoimport
за интерпретиране на числата в заглавките на колоните като индекси на масиви.
Пример:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=tags.csv
Изход:
2021-01-03T20:55:44.284+1000 no collection specified 2021-01-03T20:55:44.284+1000 using filename 'tags' as collection 2021-01-03T20:55:44.297+1000 connected to: mongodb://localhost/ 2021-01-03T20:55:44.330+1000 1 document(s) imported successfully. 0 document(s) failed to import.
Тъй като не съм посочил име на колекция, тя създаде колекция, наречена tags
(въз основа на името на файла), след което импортирах моя документ.
Нека преминем към черупката на монго и да проверим колекцията.
db.tags.find()
Резултат:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Можем да видим, че CSV данните са импортирани като JSON масив.
Ето го отново, но с по-добро форматиране, което може да направи масива по-лесен за виждане.
db.tags.find().pretty()
Резултат:
{ "_id" : ObjectId("5ff1a2b0300ed79d9836882f"), "tags" : [ "html", "css", "sql", "xml" ] }
Комбинирано с други CSV данни
CSV файлът в предишния пример се състоеше само от данни от масив. Но можем да включим и други данни във файла.
Ето пример за CSV файл, наречен articles.csv
който съдържа други данни.
_id,title,body,tags.0,tags.1,tags.2,tags.3 1.0,Web,blah,html,css,sql,xml 2.0,Animals,blah 2,cats,dogs 3.0,Plants,blah 3,trees 4.0,Oceans,blah 4
Нека импортираме този файл:
mongoimport --db=krankykranes --type=csv --headerline --useArrayIndexFields --file=articles.csv
Изход:
2021-01-03T21:14:38.286+1000 no collection specified 2021-01-03T21:14:38.287+1000 using filename 'articles' as collection 2021-01-03T21:14:38.336+1000 connected to: mongodb://localhost/ 2021-01-03T21:14:38.407+1000 4 document(s) imported successfully. 0 document(s) failed to import.
Сега нека преминем към черупката на монго и да проверим колекцията.
db.articles.find()
Резултат:
{ "_id" : 1, "title" : "Web", "body" : "blah", "tags" : [ "html", "css", "sql", "xml" ] } { "_id" : 3, "title" : "Plants", "body" : "blah 3", "tags" : [ "trees" ] } { "_id" : 4, "title" : "Oceans", "body" : "blah 4" } { "_id" : 2, "title" : "Animals", "body" : "blah 2", "tags" : [ "cats", "dogs" ] }
Нека го украсим малко.
db.articles.find().pretty()
Резултат:
{ "_id" : 1, "title" : "Web", "body" : "blah", "tags" : [ "html", "css", "sql", "xml" ] } { "_id" : 3, "title" : "Plants", "body" : "blah 3", "tags" : [ "trees" ] } { "_id" : 4, "title" : "Oceans", "body" : "blah 4" } { "_id" : 2, "title" : "Animals", "body" : "blah 2", "tags" : [ "cats", "dogs" ] }
Така можем да видим, че документите са създадени като перфектни JSON/BSON документи и са създадени масиви за съответните данни.
Забележете, че не е създаден масив за документ 4. Това е така, защото в CSV файла не са предоставени данни за масив. Така че вместо да създаде поле с празен масив, то не създаде полето или масива.