美好的一天。
我知道已经问过类似的问题,但是我还没有找到答案。我们假设有一个带有测试集合的mongo数据库。我对此集合进行查询,然后将查询结果保存到变量中,以便可以在其余代码中使用。
这是我尝试过的事情:
//method #1
var result = Test.find({}, (err,data) => {
if(err){
console.log(err)
}else{
return data;
}
});
console.log(result); //return huge array with information about collection, but not values
//method #2
function getResult() {
Test.find({}, (err,data) => {
if(err){
console.log(err)
}else{
return data;
}
})
};
var result = getResult();
console.log(result); //return undefined
//method #3
async function getResult() {
const data = await Test.find({});
return data;
}
var result = getResult();
console.log(result); //return Promise { <pending> }
我也尝试过回答Return results mongoose in find query to a variable的答案,
// method #4
function getResult(){
var query = Test.find({});
return query;
};
var query = getResult();
query.exec(function(err,names){
if(err)
return console.log(err);
names.forEach(function(name){
console.log(name) //return array with values
});
});
console.log(query); //return huge array with information about collection, but not values
//method#5
function getResult(){
var promise = Test.find({}).exec();
return promise;
};
var promise = getResult();
promise.then(function(names){
names.forEach(function(name){
console.log(name); //return array with values
});
});
console.log(promise); //return Promise { <pending> }
这些方法都没有将查询结果返回到函数外部的变量,可以在代码中进一步使用。
我将不胜感激。
首先,非常感谢您的答复。
@Raghuveer
//Method 2:
function getResult() {
Test.find({}, (err,data) => {
if(err){
console.log(err)
}else{
console.log(data); //return values array but it's ony inside function
return data
}
})
};
var result = getResult();
console.log(result); //return undefined
方法3:像这样吗?
//method #3
async function getResult() {
const data = await Test.find({});
}
async function saveResult() {
var result = await getResult();
}
但是如何从中获得结果并将其保存到变量中?
POST路线
//CREARE job event
app.post('/scheduler/jobEvent', (req,res) => {
var personnelTitle = req.body.event.title,
start = req.body.event.start + 'T12:00',
end = req.body.event.end + 'T12:00',
resourceId = req.body.event.resourceId,
projectId = req.body.event.projectId;
projectTitle = Resource.findOne({id: projectId}, (err,query) => {
if(err) throw(err);
return query;
}); //Here I try to get 'title' from document and return this value to projectTitle variable
var newJobEvent = {projectTitle: projectTitle, title: personnelTitle, start: start, end: end, resourceId: resourceId};
Event.create(newJobEvent, (err, createdEvent) => {
if (err) throw err;
console.log('Event 2 created')
res.redirect('back');
});
});
解决方案
app.post('/scheduler/jobEvent', async (req,res) => {
var start = req.body.event.start + 'T12:00',
end = req.body.event.end + 'T12:00',
jobResourceId = req.body.event.resourceId,
projectId = req.body.event.projectId;
//query to DB and get project title
foundProject = await Resource.findOne({id: projectId}, 'title'),
projectTitle = foundProject.title,
//assemble new array
newJobEvent = {title: personTitle, start: start, end: end, resourceId: jobResourceId, linkedEvent: personResourceId};