Как использовать mongoimport с моей базой данных метеоритов?
Я могу использовать mongoimport
для импорта данных csv в базу данных non-meteor mongodb, но я не могу понять, как импортировать csv в мою базу данных метеоритных приложений.
Я узнал, как запустить оболочку mongo для моего приложения meteor (meteor mongo
), но я не могу запустить mongoimport
из оболочки.
В документах mongodb для mongoimport
говорится
В этом примере mongoimport импортирует данные в формате csv в файле /opt/backups/contacts.csv в контакты коллекции в базе данных пользователей на экземпляре MongoDB, работающем на локальном хосте с номером 27017.
mongoimport --db users --collection contacts --type csv --file/opt/backups/contacts.csv
Но когда я запустил mongod
, запустил приложение meteor и запустил mongoimport
, он импортирует в мою базу данных test
, а не мою базу данных приложений.
Я прочитал этот комментарий postoverflow для postoverflow:
Используйте mongoexport, чтобы сбрасывать ваши коллекции по отдельности, затем mongoimport, чтобы импортировать файлы в db с именем meteor в экземпляре meteor mongodb. Экземпляр meteor mongo работает на порту 3002 с bind_address 127.0.0.1, а файлы данных находятся в подкаталоге проекта meteor.meteor/local/db
Но я не понимаю, как подключиться к этому экземпляру или как настроить его с помощью команды mongoimport
.
Ответы
Ответ 1
Похоже, я просто ответил на ваш комментарий в Rahuls замечательный ответ. В любом случае загрузите mongodb из mongodb.org для вашей ОС (или менеджера пакетов, например macports), и используйте инструмент, указанный в папке bin. mongoimport
не является командой в оболочке mongo, это исполняемый файл, который запускается отдельно.
Также не забудьте поставить порт (обычно 3001, если вы используете экземпляр метеор в 3000), также db обычно является метеором, а не пользователями, когда вы запускаете его
mongoimport -h localhost:3001 --db meteor --collection contacts --type csv --file /opt/backups/contacts.csv
Ответ 2
ПРИМЕЧАНИЕ. Вышеуказанный метод НЕ работал на порт 3002 для меня, но он работает на порт 3001.
Чтобы импортировать внешний TSV файл в meteor db, я запустил приложение метеоритов, в котором вам нужны данные TSV. Это также запускает службу meteor mongodb (в моем случае на host: localhost: 3001), затем я открыл терминал в OSX и через терминал, перешел в папку bin bin пакета mongodb, которую я загрузил ранее, чтобы получить двоичный код, "mongoimport". Однажды в папке bin пакета mongodb, затем в командной строке я набрал следующее ниже (некоторые параметры переключателя будут меняться... но --host, --localhost и -db switch/values должны быть как показано):
$ ./mongoimport --host localhost:3001 --db meteor --collection datarefs --type tsv --drop --headerline --file /PathToFile/DataRefs.tsv
После входа в команду mongoimport echo'd успешно импортирует в терминал. Как только это будет сделано, я смогу перейти к приложению метеорита через терминал и запустить метеоритный монго: $meteor mongo.... и посмотреть импортированную коллекцию "datarefs" в meteor db для этого приложения.
$ meteor mongo
...
...
meteor:PRIMARY> show collections
datarefs
system.indexes
meteor:PRIMARY>
Ответ 3
Сначала создайте коллекцию в приложении meteor, как это
Students = new Meteor.Collection("students");
Затем добавьте некоторое фиктивное значение, чтобы убедиться в инициализации коллекции метеоров
Students.insert({"name":"first"});
Например, в некоторых событиях с кликом.
Чтобы проверить использование этого
meteor:PRIMARY> show collections
students
system.indexes
Затем импортируйте.
mongoimport -h localhost:3001 -d meteor -c students < students.json
Как-то метеор не признает новые импортированные коллекции, вам нужно либо удалить все из них, либо добавить фиктивное значение, либо снова импортировать, либо создать новый, и инициализировать его с помощью фиктивного значения, а затем импортировать. Возможно, это ошибка привязки, потому что коллекции отображаются справа в minimongo.
Спасибо Акшату и Тому Кайлеру
Ответ 4
Небольшой script (шаблон) для запуска mongoimport на xxx.meteor.com
#!/bin/sh
# Script to import csvfile to meteor application deployed to free meteor.com hosting.
# Make sure your versions of mongo match with the metor.com mongo versions.
# As Jan 2016 it seems to be 3.x something. Tested with mongoimport 3.12.
if [ $# -eq 0 ]
then
echo "usage: $0 xxx.meteor.com collection filename.csv"
exit 1
fi
URL=$1
COLLECTION=$2
FILE=$3
echo Connecting to $URL, please stand by.... collection=$COLLECTION file=$FILE
PUPMS=`meteor mongo --url $URL | sed 's/mongodb:\/\// -u /' | sed 's/:/ -p /' | sed 's/@/ -h /' | sed 's/\// -d /'`
mongoimport -v $PUPMS --type csv --headerline --collection $COLLECTION --file $FILE
Ответ 5
Теперь я использую mongochef для перемещения данных между базами данных. Это очень просто - вы просто подключаетесь к каждой базе данных (обычно локальной и удаленной db), тогда вы можете копировать и вставлять документы в коллекции. Гораздо проще, чем в командной строке.