sql >> データベース >  >> NoSQL >> MongoDB

Meteorは、MongoDBデータベースの外部で直接更新されたデータを正しく処理できますか?

    Meteorは、外部のmongoデータベースに接続する ように構成されています。 。あなたはローカル開発アプリにmongoをパッケージ化していますが、それは快適さと簡単な統合のためだけです。

    本番環境では、常にMONGO_URLを使用してMeteorを実行中のMongoインスタンスに接続する必要があります。 環境変数

    ボーナス:MONGO_URLを設定できます 開発モードでも、開発モードで特定のデータベースに接続します。このデータベースのすべてをCRUDできることに注意してください。注意して使用してください。

    内部的には、Meteorはノードmongoドライバーを使用します。基本的に、このドライバーのすべてのAPIを使用できます(この投稿を参照 ネイティブMongoメソッドを呼び出す方法の詳細については)

    Meteorの出版/サブスクリプションシステム を使用 基本的に、クライアントに公開するデータを制御します。データが変更されるたびにパブリケーションが実行されます(オブザーバーパターンと同様)。

    すべてのクライアントがコレクションのデータをサブスクライブしている場合、コレクションが更新されると、クライアントは更新を取得します。そして今、あなたの最も欲しい機能に来ています:これは、このデータが外部ソースによって更新された場合にも機能します。

    また、非常に高速な更新間隔でも機能します。私は、Mongo-DBコレクションでPythonを介して大量のデータが更新された最近のプロジェクトに取り組みました。 Meteorアプリはそれをリッスンし、データを「リアルタイム」(またはユーザーがリアルタイムとして認識するもの)でクライアントに表示しました。

    ただし、いくつかの落とし穴があり、事前に知っておくとよいでしょう。

    1. Meteorは、_idを使用してドキュメントを作成します Mongo.ObjectIDではなくstring型の 。ただし、正しく使用すれば、読み取りと書き込みを行うことができます

    2. Meteorは、コレクションを独自のAPI でラップします コレクションをfibersと最もよく統合します ベースの環境。それ以外の機能を使用する必要がある場合は、こちら をお読みください。 およびこちら 。

    3. 返されたカーソル 動作は少し異なりますが、コレクションと同様に、rawCollectionからカーソルを受け取った場合に利用できるすべてのネイティブ機能もあります。

    4. コレクションで使用するデータ型を再確認してください。たとえば、同じ日付タイプ(ISODateなど)を使用して、更新後に意図しないエラーが発生しないようにします。 mongooseに対応するMeteorもあります 名前付きsimpl-schemanpmパッケージ )これは、コレクションの構造を維持するための良い方法です。

    要約すると、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について心配する必要はありません。 文字列であること。

    それに加えて、ドキュメントは本来あるべき姿です(データ形式のブリッジ を参照してください> )。ただし、ここで言及されていない例外がある場合は、他のユーザーにとっても重要である可能性があるため、コメントしてください。




    1. redisに挿入されたキーを取得する

    2. logstashを使用してmongoをelasticsearchに接続する方法は?

    3. WindowsDockermongoコンテナーはボリュームマウントでは機能しません

    4. MongoDB-複数の$or操作