我无法在函数中返回 mongodb 结果:
find: function (collection,query) {
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/";
MongoClient.connect(url , {keepAlive: 1,useUnifiedTopology: true,useNewUrlParser: true,}, function(err, db) {
if (err) throw err;
var dbo = db.db("node");
dbo.collection(collection).find(query).toArray(function(err, result) {
if (err) throw err;
return result;
db.close();
});
});
}
在应用程序中:
var res = db.find("users",{});
但 res 为空。 请帮助我...谢谢:)
最佳答案
以下是快速更改,请尝试这些,也请根据需要进行增强:
1)以回调方式:
db.js:
const MongoClient = require('mongodb').MongoClient;
module.exports.find = (collection, query, cb) => {
let url = "mongodb://localhost:27017/";
MongoClient.connect(url, { keepAlive: 1, useUnifiedTopology: true, useNewUrlParser: true, }, function (err, db) {
if (err) cb(err);
/* Assuming node is your db name where you've collection users */
const dbo = db.db("node");
dbo.collection(collection).find(query).toArray(function (err, result) {
db.close();
if (err) cb('Pricing err at DB ::', err);
return cb(null, result);
});
});
}
app.js:
const db = require('path to your db file');
db.find("users", {}, (err, res) => {
if (err) console.log('Printing err ::', err)
console.log('Printing res ::', res)
});
或者
2)使用async/await方式:
db.js:
const MongoClient = require('mongodb').MongoClient;
module.exports.find = async (collection, query) => {
try {
const url = "mongodb://localhost:27017/";
const db = await MongoClient.connect(url, { keepAlive: 1, useUnifiedTopology: true, useNewUrlParser: true, })
/* Assuming node is your db name where you've collection users */
const dbo = db.db("node");
const result = await dbo.collection(collection).find(query).toArray();
db.close();
return result;
} catch (error) {
console.log('Printing error at DB ::', error)
db.close();
throw (err)
}
}
app.js:
const db = require('path to your db file');
class App {
async dbCall(collectionName, query) {
try {
let res = await db.find(collectionName, query);
return res;
} catch (error) {
console.log('Printing error ::', error)
throw error;
}
}
}
module.exports = App;
const controllerObj = new controller();
controllerObj.dbCall('users', {}).then(rs => console.log(JSON.stringify(rs))).catch(err => console.log(err));
这里,如果您的 mongoDB 中不存在您的数据库/集合,则 .find()
将返回 []
Vs .findOne()
不需要 .toArray()
并且它会返回 null
。
关于node.js - Node js 返回 mongodb 查找结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59294477/