【问题标题】:Need help for mongoose .find()需要猫鼬的帮助 .find()
【发布时间】:2019-04-20 04:34:19
【问题描述】:

我需要以下格式的 Mongoose find().exec 的结果。可以这样格式化结果吗?

var myFunction = function(foo, bar) {
  model1.find({ elem: foo, elem2: bar }).exec(function(err, data) {
    if (err) {
      /* ... */
    }
    if (data) {
      if (data.passed == true) {
        return { passed: true, point: data.point };
      } else {
        return { passed: false, point: data.point };
      }
    } else {
      return { passed: false, point: "not tried" };
    }
  });
};

object = {
...
someitem: array.map(function(arr) {
  return {
    _id: program._id,
    title: program.title,
    slug: program.slug,
    status: myFunction(arr._id, arr._id2) /* Like This */
  };
});
...
} 

请原谅我的英语不好:D

【问题讨论】:

  • find(elem:foo,elem2:bar) 应该是find({elem:foo,elem2:bar})
  • 从数据中,您只返回{ passed, point}。用户从哪里获得您提到的数组?你的问题到底是什么?

标签: node.js express mongoose


【解决方案1】:

你必须从函数返回promise才能获得来自mongoose查询的值。所以将你的函数更改为:

var myFunction = function(foo,bar) {
 return new Promise(function(resolve, reject){
    model1.find({elem : foo, elem2 : bar}).exec(function (err, data){
     if(err){
       /* Blablabla*/
       reject(err);
     }
     if(data){
       if(data.passed == true){
         resolve({passed:true, point:data.point});
       } else {
         resolve({passed:false, point:data.point});
       }
     } else {
        resolve({passed:false, point:'not tried});
     }
    });
  });
}

如果你想调用函数并获取你必须做的值:

let promises, obj_elem = [];

for(let i =0;i < array.length;i++){
  promises.push(myFunction(array[i]._id, array[i]. _id2));
}

/* You can't do it sync manner so you have to use some kind of async process */
Promise.all(promises).then((result)=>{
  for(let i =0;i < result.length;i++){
     obj_elem.push({
        _id: program._id,
        title: program.title,
        slug: program.slug,
        status: result[i].passed 
     });
  }
  console.log(obj_elem); //here you will have values you want
});

【讨论】:

  • ineed 使用数据类似 ``` obj_elem: array.map(function(arr) { return { _id: program._id, title: program.title, slug: program.slug, status: myFunction (arr._id, arr._id2) /* 像这样 */ }; });```
  • @Л.Наран 您不能以同步方式使用它,因此您必须使用回调或承诺等方法来解决问题。使用承诺更新了答案。
  • 实际上我们不能使用.push,obj_elem类型不能是数组obj_elem == object的元素,就像object = {bla1:value, bla2:value, bla3:[bla3_inner1: { bla3title:value, /*and our object */ obj_elem }, bla3_inner2:{ bla3title:value, /*and our object */ obj_elem }, ] ..... :D
  • 我不知道怎么说:D
猜你喜欢
  • 2019-07-17
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-18
相关资源
最近更新 更多