6

我们本周开始使用 Meteor,并且非常渴望在未来尽可能多地使用它。

尽管今天下午我们遇到了困难,但在我们的生态系统中,我们需要能够从外部节点/流星处理和插入数据到 mongodb 中。

我们的两个主要解决方案是通过 Hbase 集群中的 MapReduce 和解析 CSV 文件并将结果插入 MongoDB 的 python 脚本。

现在,我可以在 Meteor 应用程序中使用来自 MongoDB 的数据的唯一方法是通过 Meteor(控制台或表单)添加数据。

让我们举个简单的例子,我希望能够通过 _id 访问帖子。Iron Router 可以正常工作,并提供帮助来构建 URL。使用相同的助手,我可以从三种不同的用法中找到两种不同的结果。

ObjectId 似乎是错误的,这是我之前遇到的三种情况:

http://0.0.0.0:3000/post/PAXEqRBB7RiNrdTTT => Inserted by Meteor, works fine
http://0.0.0.0:3000/post/ObjectId(526fe0701d41c894b9105bff) => Inserted by python, broken
http://0.0.0.0:3000/post/ObjectId(526fe0701d41c894b8715bff) => Inserted with meteor mongo shell

因此,除了流星之外,我无法访问 MongoDB 中插入的任何内容。

我在 Github 上发现了一些相关问题,主要是这个:

https://github.com/meteor/meteor/issues/61

但它在 8 个月前关闭,因为修复在路线图中。我正在使用流星的最新版本( 0.6.6.2 ),这似乎还没有修复。

我的问题是我能找到什么样的解决方法?我不能在 Python 中调用像 Meteor ObjectID 生成这样的 JS 方法,那么最好的解决方案是什么?

我应该使用 Node DDP 应用程序来处理我对 MongoDB 的所有外部插入吗?

4

2 回答 2

5

如果您希望直接与数据库交互,我不提倡您采用的方法,这似乎基本上是通过一些连接中间件构建一个用于与数据库交互的 API。

在我看来,你有两个选择。

1. 直接在 MongoDB 中进行更改。

鉴于几乎每种语言都有 MongoDB 绑定,这是最简单、最快捷的选择。如果您已使用 Mongo oplog 设置 Meteor,您对 Mongo 所做的更改将立即被Meteor 的 oplog 观察驱动程序拾取。

2. 使用 DDP 与 Meteor 服务器对话。

这可能是做事的“正确”方式。它还具有允许您对服务器进行 RPC 调用而不仅仅是更改数据库的优点,因此您可以利用您已经在应用程序中定义的所有Meteor.methods 。

有关Python DDP 客户端的一个非常简单的示例,请参见此处。您需要更进一步才能获得 Javascript 客户端会看到的完整反应性。

更新:Meteor 本身现在有一个成熟的 DDP 客户端,运行它的一种方法是作为 Node 上普通 Meteor 服务器的一部分。您可以做任何普通浏览器客户端会做的事情。例如,请参阅https://github.com/VirtualLab/cooperation-loadtest

于 2013-10-30T03:09:28.563 回答
1

Meteor 默认会覆盖 _id 创建。string 选项使这些 id 在控制台交互中更容易处理。我更喜欢它。你可以让你的外部插入包含一个 id 作为字符串,或者将你的流星环境设置为使用对象 id。

http://docs.meteor.com/#meteor_collection

...

idGeneration String
The method of generating the _id fields of new documents in this collection. Possible values:

'STRING': random strings
'MONGO': random Meteor.Collection.ObjectID values
于 2013-10-31T19:43:54.860 回答