首页 > 解决方案 > NodeJS 创建一个从 MongoDB 返回文档的函数

问题描述

我不确定这是否可行,但我正在使用 NodeJS,并且我正在尝试创建一个从 MongoDB 返回文档的函数。我的代码目前看起来像这样,但返回未定义:

const GetUser = (userId) => {
    let userData
    
    User.aggregate([
        { $match: {_id: mongoose.Types.ObjectId(userId)} },
        { 
             $project: {
                  "_id": 0,
                  "originId": 1,
                  "type": 1,
                  "poster": 1,
                  "content": 1,
                  "createdAt": 1,
                  "updatedAt" : 1
             }
        }
    ]).exec((err, res) => {
        if(err) {
            return err
        }
        else {
            userData = res
        }
    })

    return userData
}

标签: node.jsmongodb

解决方案


你可以这样做。您只需返回您的聚合查询,它就会返回一个承诺。

const GetUser = userId => {
  let userData;
  return User.aggregate([
    { $match: { _id: mongoose.Types.ObjectId(userId) } },
    {
      $project: {
        _id: 0,
        originId: 1,
        type: 1,
        poster: 1,
        content: 1,
        createdAt: 1,
        updatedAt: 1
      }
    }
  ]);
};

我不确定您是否需要.exec()这里,但是您可以尝试使用或不使用。

稍后您可以像这样使用您的功能:

因为它是一个承诺,你可以使用.then()它:

GetUser(id).then(response => {
   console.log(response)
})

async或者如果您在函数中使用它:

let user = await GetUser(id);
console.log(user);

推荐阅读