web-dev-qa-db-ja.com

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

Node.jsでmongooseを使用したクエリの結果を返す必要があります。

値を変数に設定するには、どのように値を返しますか?

私がする必要があるのは:

var results = users.findOne({_id : users_list[i]['user_id']},{email : 1, credits : 1},{}, function(err, docs) {
    if( err || !docs) {
        console.log("No user found");
    } else {            
        return docs;
    };
});

持っているために:

results = docs 

お返事ありがとうございます。

別の問題もあります。

FindまたはfindOneでクエリ演算子に変数を渡す方法は?のような:

var foo = "Blaa";

users.findOne({_id : users_list[i]['user_id']},{email : 1, credits : 1},{}, function(err, docs) {
    if( err || !docs) {
        console.log("No user found");
    } else {
        // I want to use the foo variable here
        console.log(foo);
    };
});
22
Xanarus

目的を達成するには、いくつかの方法があります。

1。 Mongooseクエリの使用

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

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。 Mongoose Promiseのようなオブジェクトの使用

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);
   });
}).error(function(error){
   console.log(error);
});

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

3。 Mongooseストリームの使用

最後に、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);
});

ソース 、将来の参照用。

65
Edwin Dalorzo

割り当ての前に実行されています。

 async function(req, res) {
      var user;
      await users.findOne({}, function(err,pro){
          user=pro;
        });
      console.log(user); \\ it's define
    };
5
Javad.mrz

次のコードで目的の結果を達成します。これがあなたの助けになることを願っています。

var async = require('async');

// custom imports
var User = require('../models/user');
var Article = require('../models/article');

var List1Objects = User.find({});
var List2Objects = Article.find({});
var resourcesStack = {
    usersList: List1Objects.exec.bind(List1Objects),
    articlesList: List2Objects.exec.bind(List2Objects),
};

async.parallel(resourcesStack, function (error, resultSet){
    if (error) {
        res.status(500).send(error);
        return;
    }
    res.render('home', resultSet);
});
0
Surender Singh