Javascript 通过多种方法返回Mongoose查询结果

Javascript 通过多种方法返回Mongoose查询结果,javascript,node.js,mongodb,mongoose,promise,Javascript,Node.js,Mongodb,Mongoose,Promise,我正在尝试使用Mongoose从MongoDB数据库检索数据来访问数据,但是我正在尝试通过几种方法检索数据。以下是我的检索文档方法: function retrieveDocument(collectionName, schema, _id) { conn.once('open', async () => { var model = mongoose.model(collectionName, schema, collectionName) retu

我正在尝试使用Mongoose从MongoDB数据库检索数据来访问数据,但是我正在尝试通过几种方法检索数据。以下是我的
检索文档
方法:

function retrieveDocument(collectionName, schema, _id) {
    conn.once('open', async () => {
        var model = mongoose.model(collectionName, schema, collectionName)
        return await model.findById(_id)
    });
}
以及我如何调用该方法:

function retrieveUserDocument(_id){
    return retrieveDocument("User", some_Schema, _id);
}
console.log(retrieveUserDocument("some_Id"));
但是,结果不会被打印出来,而是记录
未定义的
,因为
model.findById(_id)
方法返回一个承诺


如何在我上面定义的结构中打印结果?

我认为您应该在这里尝试一下。它可能会工作,当您调用mongoose模型时,您应该尝试等待。尝试下面编写的代码

function retrieveDocument(collectionName, schema, _id) {
    return new Promise(async(resolve, reject) => {
        conn.once('open', async () => {
            var model = await mongoose.model(collectionName, schema, collectionName)
            resolve(model.findById(_id))
        });
    });
}

非常感谢您的回复,我用承诺包装了连接,它成功了!只有一个或两个更改:在
(解析、拒绝)
之前的
async
是不必要的,在
model
调用之前的
wait
没有任何效果。相反,我需要在调用
model.findById()之前保留它。不管怎样,在
Promise
中包装连接调用,并在
find
调用中调用
resolve
,才有效!