将猫鼬查找查询的结果返回到外部变量

时间:2020-07-29 17:32:57

标签: javascript node.js mongodb mongoose

美好的一天。 我知道已经问过类似的问题,但是我还没有找到答案。我们假设有一个带有测试集合的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};

0 个答案:

没有答案