如何处理外部插入Meteor数据库?

时间:2013-10-29 21:20:50

标签: mongodb meteor

我们本周开始使用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的所有外部插入吗?

2 个答案:

答案 0 :(得分:5)

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

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

1。直接对MongoDB进行更改。

这是最简单,最快捷的选择,因为几乎所有语言都有MongoDB绑定。如果您使用Mongo oplog设置Meteor,则会立即通过 Meteor's oplog observe driver 接收您对Mongo所做的更改。

2。使用DDP与Meteor服务器通信。

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

See here ,这是一个非常简单的Python DDP客户端示例。您需要更进一步,以获得Javascript客户端看到的完整反应性..

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

答案 1 :(得分:1)

默认情况下,Meteor会覆盖_id创建。字符串选项使这些id在控制台交互中更容易处理。我更喜欢它。你可以让你的外部插入包括一个id作为字符串,或设置你的meteor env使用对象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