Javascript 从mongoose查询创建对象

Javascript 从mongoose查询创建对象,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,如何从查询结果生成对象?在数据库中,表的功能是查询数据库。如果查询是异步的,我怎么做 const returnResultOfQuery=()=>{ Dinner1300.count().exec(函数(err,count){ const random=Math.floor(Math.random()*计数) Dinner1300.findOne().skip(random).exec( 函数(错误、结果){ console.log(结果) }) })实现这一点的方法之一是首先使用Promis

如何从查询结果生成对象?在数据库中,表的功能是查询数据库。如果查询是异步的,我怎么做

const returnResultOfQuery=()=>{
Dinner1300.count().exec(函数(err,count){
const random=Math.floor(Math.random()*计数)
Dinner1300.findOne().skip(random).exec(
函数(错误、结果){
console.log(结果)
})

})
实现这一点的方法之一是首先使用
Promise.all执行所有查询,得到结果后,创建新对象。类似于:

const week = [
    { id : 1, day : 1 },
    { id : 2, day : 2 },
    { id : 3, day : 3 },
    { id : 4, day : 4 },
    { id : 5, day : 5 },
    { id : 6, day : 6 },
    { id : 7, day : 7 }
];

const returnResultOfQuery = () => {
    return Dinner1300.count ().exec ( function ( err, count ) { 
        const random = Math.floor ( Math.random () * count );

        return Dinner1300.findOne ().skip ( random ).exec (
            function ( err, result ) {
                console.log ( result );
                return result;
            } );
    } );
};

let promises = [];

for ( let x in week ) {
    promises.push ( returnResultOfQuery () );
    promises.push ( returnResultOfQuery () );
    promises.push ( returnResultOfQuery () );
}

let diet = [];

Promise.all ( promises ).then ( function ( result ) {
    let i = 0;
    for ( let x in week ) {
        diet.push (
            {
                id : x.id,
                day : x.day,
                meals : [
                    result[ i ],
                    result[ i + 1 ],
                    result[ i + 2 ]
                ]
            }
        );
        i = i + 3;
    }
} );

console.log ( diet );

p.S:我还没有测试上面的代码。

您可以使用代码,它只是一个包装器

const returnResultOfQuery = () => {
return new Promise((resolve, reject) => {
    Dinner1300.count().exec(function (err, count) {
        const random = Math.floor(Math.random() * count)
        Dinner1300.findOne().skip(random).exec(
          function (err, result) {
            if (err) {
                return reject(err);
            }
            return resolve(result);
        });
     });
  });
}

const week = [
  {id: 1, day: 1},
  {id: 2, day: 2},
  {id: 3, day: 3},
  {id: 4, day: 4},
  {id: 5, day: 5},
  {id: 6, day: 6},
  {id: 7, day: 7},
]

 const diet = Promise.all(week
    .map(value => ({
      id: value.id,
      day: value.day,
      meals: [
        returnResultOfQuery(),
        returnResultOfQuery(),
        returnResultOfQuery()
      ]
   }))
 );

console.log(diet)

看起来您的示例不起作用。另外,您是否可以更新您的问题以包含Mongo查询的代码?此时无法回答您的问题,因为我们不知道您的查询是什么样子的我添加了查询示例