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

Meteorのmongoクエリで読み取り設定を指定する方法

    以下がMeteorとMongoの関係をよりよく理解するのに役立つことを願っています。

    より快適なMeteorコレクション

    Meteorは、完全なmongo機能を提供します。ただし、快適さのために、ラップされたAPI を提供します Meteor環境と最もよく統合するmongoコレクションのしたがって、Mongoを経由してインポートする場合

    import { Mongo } from 'meteor/mongo' 
    

    主に、操作がMeteorファイバーで実行されるラップされたmongoコレクションをインポートします。これらのラップされたコレクションのクエリによって返されるカーソルも、「自然な」カーソルではなく、ラップされたカーソル Meteorに最適化されます。

    実装されていないこれらのインスタンスでネイティブ機能にアクセスしようとすると、エラーが発生します。あなたの場合:

    import { Meteor } from 'meteor/meteor';
    import { Random } from 'meteor/random';
    
    const ExampleCollection = new Mongo.Collection('examples')
    
    Meteor.startup(() => {
      // code to run on server at startup
      ExampleCollection.insert({ value: Random.id() })
      const docsCursor = ExampleCollection.find();
      docsCursor.readPref('primary')
    }); 
    

    につながる

    TypeError: docsCursor.readPref is not a function
    

    ノードmongoドライバーコレクションへのアクセス

    幸いなことに、下のレイヤーにアクセスできます Collection.rawCollection()経由 ここで、ノードMongoドライバーに完全にアクセスできます。これは、MeteorのMongo.Collectionの内部にあるためです。 Cursorです 最終的にこのネイティブドライバーを利用しています。

    ここで、他に2つの問題があります。

    1. readPref ノードで名前が付けられます-mongoカーソル cursor.setReadPreference (3.1 API)。

    2. Cursor.fetch 存在しませんが、cursor.toArrayという名前です これは(多くのネイティブオペレーションが行うように)Promiseを返します

    最後にあなたの質問に答えるために

    次のことができます:

    import { Meteor } from 'meteor/meteor';
    import { Random } from 'meteor/random';
    
    const ExampleCollection = new Mongo.Collection('examples')
    
    Meteor.startup(() => {
      // code to run on server at startup
    
      ExampleCollection.insert({ value: Random.id() })
      const docsCursor = ExampleCollection.rawCollection().find();
      docsCursor.setReadPreference('primary')
      docsCursor.toArray().then((docs) => {
        console.log(docs)
      }).catch((err)=> console.error(err))
    });
    

    概要




    1. リチウムの明確な選択

    2. 複数フィールドのMongoDB一意のインデックス

    3. Ubuntu上のMongoDBはサービスとして起動せず、ログには何も記録されません

    4. SpringBootがMongoDBリポジトリをセットアップする