如何在函数中查询MongoDB,在res.render中查询到ejs

我想查询Mongodb中的最后10个元素,并返回此查询中的元素,以呈现给index.ejs我尝试了很多方法,例如(callback,asyc函数),但我无法解决这个问题

function getlastelements(ID){ var MongoC = mongodb.MongoClient; var url = 'mongodb://localhost:27017/Weatherdb'; MongoC.connect(url, function(err,db){ var collection = db.collection('datas'); collection.find({"ID" : String(ID)}).sort({_id:-1}).limit(10),(function(err,cursor){ var xyz = cursor.toArray(); return(xyz.length); }) }); } console.log(getlastelements(1)); 

       

网上收集的解决方案 "如何在函数中查询MongoDB,在res.render中查询到ejs"

您的函数可以返回一个承诺,您可以调用.then()方法来获取值(另请注意,在函数结束时closures数据库)

 var mongodb = require('mongodb') function getlastelements(ID){ return new Promise(function(resolve, reject){ var MongoC = mongodb.MongoClient; var url = 'mongodb://localhost:27017/Weatherdb'; MongoC.connect(url, function(err,db){ var collection = db.collection('datas'); collection.find({"ID" : String(ID)}).sort({_id:-1}).limit(10) .toArray(function(err, cursor){ if(err) reject(err) resolve(cursor.length) db.close() }) }) }); } getlastelements(1).then(result => console.log(result)).catch(err => console.log(err) 

Javascript的承诺