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

Posted

技术标签:

【中文标题】如何在我的流星应用程序数据库中使用 mongoimport?【英文标题】:how to use mongoimport with my meteor application database? 【发布时间】:2013-02-28 05:35:18 【问题描述】:

我可以使用 mongoimport 将 csv 数据导入非流星 mongodb 数据库,但我不知道如何将 csv 导入我的流星应用程序数据库。

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

mongoimport 的 mongodb 文档说

在此示例中,mongoimport 将 /opt/backups/contacts.csv 中的 csv 格式数据导入到运行在 localhost 端口号 27017 上的 MongoDB 实例上的用户数据库中的联系人集合中。

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

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

我阅读了这篇 *** 帖子评论:

使用 mongoexport 单独转储您的集合,然后使用 mongoimport 将文件导入流星 mongodb 实例中名为 meteor 的数据库中。流星mongo实例运行在3002端口,bind_address为127.0.0.1,数据文件在meteor项目子目录.meteor/local/db

但我不明白如何连接到该实例或如何使用mongoimport 命令定位它。

【问题讨论】:

【参考方案1】:

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

别忘了把端口放进去(如果你在 3000 运行你的流星实例,通常是 3001),db 通常也是 流星而不是用户当你运行它时

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

【讨论】:

最奇怪的事情不断发生。我按照您的说法将数据导入到名为kanji 的集合中。但是从流星中,我在查询时收到kanji is undefined 的错误。如果我从流星 js 代码插入它,我可以读回我插入的记录。不确定 mongoimport 记录去了哪里,但它们不在我的流星数据库中。 它看起来不像进入你的流星数据库,使用像 MongoHUB github.com/fotonauts/MongoHub-Mac 这样的工具来帮助你检查,我注意到你使用 users 来代替你的数据库而不是 meteor你尝试改变它? 小日华!此外,如果您还没有这样做,您还需要在客户端和服务器 js 上使用 var kanji= new Meteor.Collection('kanji');。 Meteor 不会检查集合,除非你告诉它 我试图批准您的编辑,但它不会让其他人先得到它,-h--host 可以工作 阿里加图!好的,是的,在我明确地在流星中进行了收集之后,然后它似乎连接了 mongoimport。诡异的。这些东西并不总是很直观!感谢您的帮助!【参考方案2】:

注意:上述方法对我来说不适用于端口 3002,但它确实适用于端口 3001。

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

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

按回车后,mongoimport 在终端回显成功导入。完成此操作后,我可以通过终端导航到流星应用程序并启动流星 mongo:$meteor mongo....然后在流星数据库中查看此应用程序的导入集合“datarefs”。

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

【讨论】:

您也可以通过homebrew 安装mongomongoimport 将可用【参考方案3】:

首先像这样在流星应用中创建集合

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 中。

感谢 Akshat 和 Tom Kyler

【讨论】:

谢谢!我很困惑,因为在使用 mongoimport 加载数据之前,我没有通过 Meteor 初始化集合。在我初始化集合并加载数据之前,什么都没有显示。【参考方案4】:

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

#!/bin/sh # 将 csvfile 导入部署到免费流星.com 托管的流星应用程序的脚本。 # 确保您的 mongo 版本与 metor.com 的 mongo 版本匹配。 # 作为 2016 年 1 月,它似乎是 3.x 的东西。使用 mongoimport 3.12 测试。 如果 [ $# -eq 0 ] 然后 echo "用法:$0 xxx.meteor.com 集合文件名.csv" 1号出口 菲 网址=$1 收藏=$2 文件=$3 echo 正在连接 $URL,请稍候.... 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 在数据库之间移动数据。这非常简单——您只需连接到每个数据库(通常是本地和远程数据库),然后您就可以跨集合复制和粘贴文档。比命令行方法容易得多。

【讨论】:

以上是关于如何在我的流星应用程序数据库中使用 mongoimport?的主要内容,如果未能解决你的问题,请参考以下文章

在我自己的服务器上部署流星

Meteor:如何将流星应用发布到应用商店?

如何使用铁路由器或流星本身提供文件?

如何使用 mongodb 显示我的用户集合

如何使用 mongodb 显示我的用户集合

如何从流星调用android GCM