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

マングースでスキーマを渡さずにコレクションをクエリする

    マングースのホームページから:

    Mongooseは、アプリケーションデータをモデル化するための簡単なスキーマベースのソリューションを提供し、組み込みの型キャスト、検証、クエリ構築、ビジネスロジックフックなどをすぐに使用できます。

    マングースは、潜在的に一意のドキュメントのコレクションからスキーマを推測することはできません。 MongoDBは、コレクションに格納されているドキュメントにスキーマを適用しません。

    そのため、MongooseはNodeJSネイティブドライバー(ここ)にレイヤーを追加し、多くの人がより生産的だと感じています。 Node.JSを使用する場合、MongoDBで使用する必要はありません。

    マングースが機能するには、基本的に2つのことが必要です。

    1. Schema ==これはドキュメント構造(参照)を定義します。検証の追加、新しいメソッドの追加、仮想プロパティの追加、データ型の使用、他のコレクション(モデル)への参照の確立を行うことができます。
    2. モデル==これは、コレクション(参照)に対するクエリを表現するために実行時に使用されるクラスです。スキーマ定義は、モデルの構築に使用されます。

    したがって、貼り付けたサンプルで見たように、子猫のSchemaがあります。 定義してから、Model Kitten 創造された。スキーマとモデルを使用することの良い点は、Mongooseが使用可能なプロパティ/フィールドを強制することです。

    Schemaのみを定義します sおよびModel ■アプリケーションで1回。したがって、通常、アプリケーションの起動時に、コードを実行してそれらを定義してから、Modelを使用する必要があります。 アプリケーションのライフサイクル全体で必要に応じてインスタンスを作成します。

    マングースを潜在的に使用したい理由は他にもたくさんあります。

    ただし、その通りです。NodeJSネイティブドライバーを使用することで、スキーマを使用せずに、より直接的なものを使用できます。構文はあなたが示したものと似ていますが、もう少し複雑です:

    MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
      if(err) { return console.dir(err); }
    
      var collection = db.collection('kittens');
    
        collection.find().toArray(function(err, kittens) {
            // here ...
        });    
    });
    

    単純ではなく:

    Kitten.find(function(err, kittens) {
    
    });
    

    さらに、Mongooseを使用すると、より複雑なクエリを記述した方が読み書きが簡単になる場合があります。

    Kitten.find().where('name', 'Harold').exec(/*callback*/);
    

    フレームワークをよりよく理解し、それがニーズに適しているかどうかを確認するために、より多くのドキュメントを読むことをお勧めします。残念ながら、ドキュメントは少し散らばっていますが、Guideの小見出しに目を通すと 見出しには、たくさんの良い情報があります。



    1. $lookupが空の配列を返す

    2. redisのpubsubタイムアウト機能を実装するにはどうすればよいですか?

    3. Mongoose/MongoDBの結果フィールドがJavascriptで未定義で表示される

    4. CODとCMLを使用して、株式データを予測するアプリケーションを構築する