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

変数への検索クエリで結果をマングースに返します

    あなたが望むものを達成するためのいくつかの方法があります。

    1。マングースクエリの使用

    この戦略では、関数は、後でメソッドexecを呼び出すために使用できるMongooseクエリを返します。 結果を得るためにそれを使用します。

    function getJedisQuery(name){
       var query = Jedi.find({name:name});
       return query;
    }
    

    次に、次のようにするだけで使用できます。

    var query =  getJedisQuery('Obi-wan');
    query.exec(function(err,jedis){
       if(err)
          return console.log(err);
       jedis.forEach(function(jedi){
          console.log(jedi.name);
       });
    });
    

    2。マングースプロミスのようなオブジェクトの使用

    Moogoseは、promiseのようなオブジェクトのサポートを提供します。あなたがしなければならないのは私が上でしたことと幾分似ていることですが、今回はexecを呼び出します コールバックのないメソッド。

    function getJedisPromise(name){
       var promise = Jedi.find({name:name}).exec();
       return promise;
    }
    

    次に、次の操作を行うだけで使用できます。

    var promise = getJedisPromise('Luke');
    promise.then(function(jedis){
       jedis.forEach(function(jedi){
          console.log(jedi.name);
       });
    })
    

    この回答のコメントセクションで強調されているように、これらのオブジェクトは実際には約束ではなく、考慮する必要があります(クエリは約束ではありませんを参照)。

    3。マングースストリームの使用

    最後に、Mongooseはストリームもサポートしており、ストリームはイベントエミッターです。したがって、ストリームを取得してから、「データ」イベントと「エラー」イベントをサブスクライブできます。このように:

    function getjedisStream(name){
       var stream = Jedi.find({name:name}).stream();
       return stream;
    }
    

    次に、次のことを簡単に行うことができます:

    var stream = getJedisStream('Anakin');
    stream.on('data', function(jedis){
       jedis.forEach(function(jedi){
          console.log(jedi.name);
       });
    });
    stream.on('error', function(error){
        console.log(error);
    });
    

    ソース、将来の参照用。



    1. マングースfind()、結果ドキュメントにアクセスする方法は?

    2. Azure上のMongoDB:適切なインスタンスタイプを選択する方法は?

    3. フィールド''のオブジェクト'target'のフィールドエラー:拒否された値[];コード[typeMismatch.target。、typeMismatch。、typeMismatch.java.util.Date、typeMismatch]

    4. $projectステージで$in演算子を使用して配列をフィルタリングします