Javascript 通过多种方法返回Mongoose查询结果
我正在尝试使用Mongoose从MongoDB数据库检索数据来访问数据,但是我正在尝试通过几种方法检索数据。以下是我的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
检索文档方法:
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
,才有效!