node.js - Node js 返回 mongodb 查找结果

标签 node.js mongodb

我无法在函数中返回 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/

相关文章:

node.js - 使用 Mongoose 在嵌入式数据模型中添加对象

java - 商业智能和 NoSQL

javascript - 如何使用 MongoDB 和 Nodejs 创建用户角色/权限?

node.js - webpack错误: custom keyword definition is invalid: data/errors should be boolean

javascript - NodeJs 仅返回第一个文档

javascript - 使用 GraphicsMagick/gm 在附加图像之间添加边距

mongodb - 设置 Mongo CLI 结果大小

node.js - Mongoose 从其他领域创建自定义_id

mongodb - 如何在 mongodb 中更新或插入嵌套文档到数组中

node.js - Istanbul 尔检查覆盖率始终返回 true