Meteorは、外部のmongoデータベースに接続する ように構成されています。 。あなたはローカル開発アプリにmongoをパッケージ化していますが、それは快適さと簡単な統合のためだけです。
本番環境では、常にMONGO_URL
を使用してMeteorを実行中のMongoインスタンスに接続する必要があります。 環境変数
。
ボーナス:MONGO_URL
を設定できます 開発モードでも、開発モードで特定のデータベースに接続します。このデータベースのすべてをCRUDできることに注意してください。注意して使用してください。
内部的には、Meteorはノードmongoドライバーを使用します。基本的に、このドライバーのすべてのAPIを使用できます(この投稿を参照 ネイティブMongoメソッドを呼び出す方法の詳細については)
Meteorの
すべてのクライアントがコレクションのデータをサブスクライブしている場合、コレクションが更新されると、クライアントは更新を取得します。そして今、あなたの最も欲しい機能に来ています:これは、このデータが外部ソースによって更新された場合にも機能します。
また、非常に高速な更新間隔でも機能します。私は、Mongo-DBコレクションでPythonを介して大量のデータが更新された最近のプロジェクトに取り組みました。 Meteorアプリはそれをリッスンし、データを「リアルタイム」(またはユーザーがリアルタイムとして認識するもの)でクライアントに表示しました。
ただし、いくつかの落とし穴があり、事前に知っておくとよいでしょう。
-
Meteorは、
_id
を使用してドキュメントを作成しますMongo.ObjectID
ではなくstring型の 。ただし、正しく使用すれば、読み取りと書き込みを行うことができます 。 -
Meteorは、コレクションを独自のAPI でラップします コレクションを
fibers
と最もよく統合します ベースの環境。それ以外の機能を使用する必要がある場合は、こちら をお読みください。 およびこちら 。 -
返されたカーソル 動作は少し異なりますが、コレクションと同様に、
rawCollection
からカーソルを受け取った場合に利用できるすべてのネイティブ機能もあります。 -
コレクションで使用するデータ型を再確認してください。たとえば、同じ日付タイプ(ISODateなど)を使用して、更新後に意図しないエラーが発生しないようにします。
mongoose
に対応するMeteorもあります 名前付きsimpl-schema
(npmパッケージ )これは、コレクションの構造を維持するための良い方法です。
要約すると、MeteorガイドとAPIドキュメントのほとんどを検討する場合、外部で更新されたコレクションの統合は通常非常にうまく機能し、それを実行するためのpub / subシステムを理解することが主な目的であるため、順調に進んでいるはずです。
編集:
はい、できますが、別のクエリに注意する必要があります。 (外部で作成された)ドキュメントの値が次の場合:
{ "_id" : ObjectId("4ecc05e55dd98a436ddcc47c") }
次に、(Meteor)クエリをから変更する必要があります
collection.findOne("4ecc05e55dd98a436ddcc47c") // returns undefined
collection.findOne({ "_id" : new Mongo.ObjectID("4ecc05e55dd98a436ddcc47c") }) // returns { _id: ObjectID { _str: '4ecc05e55dd98a436ddcc47c' } }
同じパターンがドキュメントの作成にも使用されます。
の代わりにcollection.insert({ foo:'bar' })
新しく作成したObjectIDを渡します:
collection.insert({ foo:'bar', _id: new Mongo.ObjectID() })
上記の方法でMeteorでドキュメントを作成する場合は、_id
について心配する必要はありません。 文字列であること。
それに加えて、ドキュメントは本来あるべき姿です(データ形式のブリッジ を参照してください> )。ただし、ここで言及されていない例外がある場合は、他のユーザーにとっても重要である可能性があるため、コメントしてください。