6

今週から Meteor を使い始めましたが、今後できるだけ多くのプロジェクトで Meteor を使いたいと思っています。

今日の午後、岩にぶつかりましたが、私たちのエコシステムでは、ノード/流星の外からmongodb内でデータを処理および挿入できる必要があります。

これを行うための 2 つの主なソリューションは、Hbase クラスターでの MapReduce と、CSV ファイルを解析して結果を MongoDB に挿入する Python スクリプトです。

現在、Meteor アプリケーション内で MongoDB のデータを使用できる唯一の方法は、データが Meteor (コンソールまたはフォーム) を介して追加された場合です。

簡単な例を見てみましょう。_id を介して投稿にアクセスできるようにしたいと考えています。Iron Router はそれで問題なく動作し、URL を構築するためのヘルパーを提供します。同じヘルパーを使用して、3 つの異なる使用法から 2 つの異なる結果を見つけることができました。

ObjectId が間違っているようです。これらは以前に遭遇した 3 つのケースです。

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 か月前にクローズされました。meteor の最新バージョン ( 0.6.6.2 ) を使用していますが、これはまだ修正されていないようです。

私の質問は、どのような回避策を見つけることができますか? Python 内で Meteor ObjectID 生成のような JS メソッドを呼び出すことができないので、何が最善の解決策でしょうか?

Node DDP アプリを使用して、MongoDB へのすべての外部挿入を処理する必要がありますか?

4

2 に答える 2

5

データベースと直接対話することを検討している場合、基本的に接続ミドルウェアを介してデータベースと対話するための API を構築するように思われるアプローチを推奨しません。

あなたには2つの選択肢があるように私には思えます。

1. MongoDB に直接変更を加えます。

ほぼすべての言語に対応する MongoDB バインディングがあることを考えると、これが最も簡単で迅速なオプションです。Mongo に加えた変更は、Mongo oplog を使用して Meteor をセットアップしている場合、 Meteor の oplog 監視ドライバーによってすぐに取得されます。

2. DDP を使用して Meteor サーバーと通信します。

これはおそらく「正しい」方法です。また、データベースを変更するだけでなく、サーバーに対して RPC 呼び出しを行うことができるという利点もあるため、アプリで既に定義したすべてのMeteor.methodsを利用できます。

Python DDP クライアントの非常に単純な例については、こちらを参照してください。Javascriptクライアントが見る完全な反応性を得るには、もう少し進める必要があります..

更新: 現在、Meteor 自体には本格的な DDP クライアントがあり、それを実行する 1 つの方法は、Node.js 上の通常の Meteor サーバーの一部として実行することです。通常のブラウザ クライアントでできることは何でもできます。たとえば、https://github.com/VirtualLab/cooperation-loadtestを参照してください。

于 2013-10-30T03:09:28.563 に答える
1

Meteor は、デフォルトで _id の作成をオーバーライドします。string オプションを使用すると、これらの ID をコンソールの操作で扱いやすくなります。私はそれが好きです。外部挿入に ID を文字列として含めるか、オブジェクト ID を使用するように meteor env を設定できます。

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 に答える