javascript - 从 MongoDB 文档返回单个字段

标签 javascript node.js mongodb

问题

你好。我只是在 Node.js 和 MongoDB 中做一个简单的测试项目,但在从文档获取数据时遇到了一些问题。我创建了一个从数据库检索数据的函数,并将该函数放入模块中。请参阅下面我的文档格式以及我的代码。我真的不知道问题出在哪里。

文档格式

{
    "email" : "example@helpme.com",
    "name" : "John Smith",
}

函数代码

module.exports = {
    GetInfo: function(MongoClient, assert, baseValues, targetField) {
        var result = "";
        MongoClient.connect(db_link, function(err, db) {
            assert.equal(null, err);
            var doc = db.collection('userdata').find(baseValues);
            if (doc != null) {
                result = doc[targetField];
            } else { db.close(); }
        });
        return result;
    },
}

函数调用

var MongoClient = require('mongodb').MongoClient;
var assert = require('assert');
var name = GetInfo(MongoClient, assert, { "email":"example@helpme.com" }, "name");
console.log(name);

最佳答案

由于数据库连接和查询都是异步I/O操作,所以当你尝试连接mongodb时,返回结果;已经被执行了。

这是一个 promise 版本,您可以尝试:

函数代码

module.exports = {
  connect: function(MongoClient) {
    return new Promise(function(resovle, reject) {
      MongoClient.connect(db_link, function(err, db) {
        if(err)
          reject(err);
        else
          resovle(db);
      });
    });
  },
  findOne: function(db, baseValues) {
    return new Promise(function(resovle, reject) {
      db.collection('userdata').findOne(baseValues, function(err, doc) {
        if(err)
          reject(err);
        else
          resovle(doc);
      });
    });
  }
};

函数调用

var MongoClient = require('mongodb').MongoClient;
connect(MongoClient)
  .then(function(db) {
    return findOne(db, { "email":"example@helpme.com" });
  })
  .then(function(doc) {
    if(doc) {
      console.log(doc.name);
    }
  })
  .catch(console.log);

关于javascript - 从 MongoDB 文档返回单个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39563735/

相关文章:

javascript - Fabricjs - 如何检测存在对象的 Canvas 的总宽度/高度

node.js - JEST with Express 未完成

mongodb - mongodb 中嵌套数组对象的展开和分组

javascript - 验收测试侧重于传出的 http 请求

javascript - setState 不设置值

javascript - 如何从html中删除所有属性?

node.js - expressjs 和 socket.io - 客户端上的重复消息

mongodb - Mongoose 从数组中提取 ObjectId

javascript - 将 Node.js 参数传递给 mongodb 请求

javascript - CKEditor 工具栏配置不起作用