如何在我的Meteor应用程序数据库中使用mongoimport?

18

我能够使用mongoimport将csv数据导入非Meteor的mongodb数据库,但我无法将csv导入我的Meteor应用程序数据库。

我学会了如何为我的Meteor应用程序运行mongo shell (meteor mongo),但我无法从shell运行mongoimport

mongoimport的mongodb文档说:

在此示例中,mongoimport将/opt/backups/contacts.csv中的csv格式数据导入到运行在本地主机端口编号为27017的MongoDB实例上的users数据库中的联系人集合中。

mongoimport --db users --collection contacts --type csv --file /opt/backups/contacts.csv

但是,当我运行mongod,启动我的Meteor应用程序,并运行mongoimport时,它会导入到我的test数据库,而不是我的应用程序数据库。

我阅读了这个stackoverflow帖子的评论:

使用mongoexport逐个转储您的集合,然后使用mongoimport将文件导入到名为meteor的meteor mongodb实例中的db。 Meteor mongo实例在端口3002上以bind_address 127.0.0.1运行,数据文件位于meteor项目子目录.meteor/local/db中

但我不知道如何连接到那个实例或如何使用mongoimport命令来定位它。

5个回答

23

看起来我刚刚在Rahuls wonderful answer中回答了你的评论。无论如何,从mongodb.org下载适用于您操作系统的MongoDB(或类似macports的软件包管理器),并使用bin文件夹中提供的工具。 mongoimport不是mongo shell中的命令,它是一个单独运行的可执行文件。

另外,别忘记加入端口号(通常情况下是3001,如果您在3000上运行meteor实例),同时运行时数据库通常为meteor而不是users

mongoimport -h localhost:3001 --db meteor --collection contacts --type csv --file /opt/backups/contacts.csv

1
你好!如果您还没有这样做,请在客户端和服务器端的JS中仍然使用var kanji= new Meteor.Collection('kanji');。除非您告诉Meteor,否则它不会检查集合。 - Tarang
1
我尝试批准您的编辑,但它不允许我这样做,可能是其他人先处理了。使用-h--host命令都可以。 - Tarang
如果你的输入是一个 JSON 数组,别忘了添加 --jsonArray。 - Reimund
哇,试图在32位上执行64位。自己打了一巴掌 - Prashant
我遇到了一些与Meteor运行Mongo端口相关的错误。但是,如果您只运行meteor mongo,介绍文本将告诉您它正在使用哪个端口。例如,“connecting to: 127.0.0.1:30001/meteor”。然后,您可以在mongoimport命令中使用它。 - bryan kennedy
显示剩余5条评论

8

注意:对于我来说,上述方法在3002端口上没有起作用,但是在3001端口上可以使用。

要将外部TSV文件导入meteor db,我启动了需要TSV数据的meteor应用程序。这也会启动meteor mongodb服务(在我的情况下为localhost:3001主机),然后我在OSX中打开了一个终端,并通过终端导航到mongodb软件包bin文件夹,在那里我之前下载了二进制文件“mongoimport”。一旦进入mongodb软件包的bin文件夹,然后在命令提示符下键入以下内容(某些开关选项可能会有所不同...但--host、--localhost和--db开关/值应如下所示):

$  ./mongoimport --host localhost:3001 --db meteor --collection datarefs --type tsv --drop --headerline --file /PathToFile/DataRefs.tsv

在按下回车键后,mongoimport 在终端上显示了成功导入的信息。完成后,我可以通过终端访问 Meteor 应用程序并启动meteor mongo: $meteor mongo....,在此应用程序的 Meteor db 中查看已导入的集合"datarefs"。

$  meteor mongo
...
...
meteor:PRIMARY> show collections
datarefs
system.indexes
meteor:PRIMARY>

你也可以通过 homebrew 安装 mongo,然后就可以使用 mongoimport 了。 - dennismonsewicz

4
首先在Meteor应用程序中创建集合,如下所示:

首先在Meteor应用程序中创建集合,如下所示:

Students = new Meteor.Collection("students");

然后添加一些虚拟值以确保 Meteor 初始化了集合

Students.insert({"name":"first"}); 例如,在某个点击事件中。 要检查,请使用以下命令:

meteor:PRIMARY> show collections students system.indexes

然后导入。 mongoimport -h localhost:3001 -d meteor -c students < students.json 不知何故,Meteor 无法识别新导入的集合,您需要删除所有集合并添加一些虚拟值,然后再次导入,或者创建一个新的集合并使用虚拟值初始化它,然后再导入。可能是绑定错误,因为集合在 minimongo 中正确显示。

感谢 Akshat 和 Tom Kyler 的帮助。


谢谢!我之前很困惑,因为在使用mongoimport加载数据之前,我没有通过Meteor初始化集合。直到我初始化了集合并且再次加载数据后,才有数据显示出来。 - Noah Sussman

0

一个用于在 xxx.meteor.com 上运行 mongoimport 的小脚本(模板)

    #!/bin/sh
# 脚本用于将 csvfile 导入到部署在免费的 meteor.com 托管上的 meteor 应用程序中。 # 确保您的 mongo 版本与 metor.com 的 mongo 版本匹配。 # 截至 2016 年 1 月,它似乎是 3.x 版本。已经使用 mongoimport 3.12 进行测试。
if [ $# -eq 0 ] then echo "用法: $0 xxx.meteor.com 集合名 文件名.csv" exit 1 fi
URL=$1 COLLECTION=$2 FILE=$3
echo 正在连接到 $URL,请稍候.... 集合=$COLLECTION 文件=$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

0

现在我使用mongochef在数据库之间移动数据。这非常容易--您只需连接到每个数据库(通常是本地和远程数据库),然后可以在集合之间复制和粘贴文档。比命令行方法简单得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接