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);
};
});
目的を達成するには、いくつかの方法があります。
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);
});
ソース 、将来の参照用。
割り当ての前に実行されています。
async function(req, res) {
var user;
await users.findOne({}, function(err,pro){
user=pro;
});
console.log(user); \\ it's define
};
次のコードで目的の結果を達成します。これがあなたの助けになることを願っています。
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);
});