Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从MongoDB文档返回单个字段_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript 从MongoDB文档返回单个字段

Javascript 从MongoDB文档返回单个字段,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,问题 你好。我正在Node.js和MongoDB中做一个简单的测试项目,从文档中获取数据时遇到了一些问题。我创建了一个从数据库中检索数据的函数,并将该函数放在一个模块中。请参阅我的文件格式以及下面的代码。我真的不知道问题出在哪里 文档格式 { "email" : "example@helpme.com", "name" : "John Smith", } 功能代码 module.exports = { GetInfo: function(MongoClient, ass

问题

你好。我正在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;
    },
}
module.exports = {
    GetInfo: function(MongoClient, assert, baseValues, targetField, next) {
        MongoClient.connect(db_link, function(err, db) {

            assert.equal(null, err);
            var collection = db.collection('userdata');

            collection.findOne(baseValues, function(err, doc) {

                assert.equal(null, err);
                if (doc != null) {
                    var result = doc[targetField];
                    next(result); // err to callback missing
                } else {
                  db.close(); // callback missing
                }
            });
        });
    }
}
函数调用

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

    console.log(res);
});

您正在尝试在回调函数外部获取结果

试试看

2016年9月19日更新

功能代码

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;
    },
}
module.exports = {
    GetInfo: function(MongoClient, assert, baseValues, targetField, next) {
        MongoClient.connect(db_link, function(err, db) {

            assert.equal(null, err);
            var collection = db.collection('userdata');

            collection.findOne(baseValues, function(err, doc) {

                assert.equal(null, err);
                if (doc != null) {
                    var result = doc[targetField];
                    next(result); // err to callback missing
                } else {
                  db.close(); // callback missing
                }
            });
        });
    }
}

函数调用

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

    console.log(res);
});

您正在尝试在回调函数外部获取结果

试试看

2016年9月19日更新

功能代码

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;
    },
}
module.exports = {
    GetInfo: function(MongoClient, assert, baseValues, targetField, next) {
        MongoClient.connect(db_link, function(err, db) {

            assert.equal(null, err);
            var collection = db.collection('userdata');

            collection.findOne(baseValues, function(err, doc) {

                assert.equal(null, err);
                if (doc != null) {
                    var result = doc[targetField];
                    next(result); // err to callback missing
                } else {
                  db.close(); // callback missing
                }
            });
        });
    }
}

函数调用

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

    console.log(res);
});

因为数据库连接和查询是异步i/o操作,所以当您尝试连接到mongodb时,
返回结果已被执行

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

功能代码

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);

因为数据库连接和查询是异步i/o操作,所以当您尝试连接到mongodb时,
返回结果已被执行

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

功能代码

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);

仍然无法通过
var name=GetInfo(MongoClient,assert,{“email”:example@helpme.com“},”名称“)。您应该尝试promise或generator之类的方法。仍然无法通过
var name=GetInfo(MongoClient,assert,{“email”:example@helpme.com“},”名称“)。您应该尝试类似于promise或generator的方法。