如何使用Node.js查询Mongo?

时间:2015-11-06 00:52:35

标签: javascript node.js mongodb asynchronous mongodb-query

我意识到这听起来像是一个完全多余的问题,但只是听我说。

最终我想从dom查询MongoDB,但在此之前,我可以通过我的路由模块进行操作。这是我的疑问:

var db = require('./config/db.js');

router.get('/test', function (req, res) {
  res.jsonp(db.getData('sampleSet'));
});

' sampleSet'是我查询的集合的名称。 getData函数应该从MongoDB获取数据。我把它放在MongoClient连接函数的回调中,因为我无法用其他方式表示。从我的角度来看,由于getData()返回一个带回调的函数findData,它应该返回数据。但它并没有。 console.logs返回数据,但必须返回undefined。

function findData (db, c, callback) {
  var collection = db.collection(c);
  collection.find().toArray(function(err, docs) {
    assert.equal(err, null);   
    callback(docs);
  });
};

MongoClient.connect(url, function(err, db) {
  assert.equal(err, null);
  console.log('CONNECTED CORRECTLY TO SERVER.');
  exports.getData = function(c) {
    return 
    findData(db, c, function(docs) {
      console.log('FOUND THE FOLLOWING RECORDS: ');
      return docs;
      db.close();
    });
  }
});

2 个答案:

答案 0 :(得分:4)

如果var db = require('./config/db.js');是您的架构,'sampleSet'是集合名称,那么您可以使用此

获取数据

router.get('/test', function (req, res) {
  db.sampleSet.find({},function(err,data){
    if(err)
      throw err;
    else
      res.send(data)
    });
  });

但为此您必须以这种方式编写db.js文件

var mongoose = require('mongoose');
var Schema = mongoose.Schema;



var sampleSetSchema = new Schema({
//Your schemas goes here..
  // fields : types
  // ..
  // ..
}, {
	collection: "sampleSet" // collection name
});



// // Export the Mongoose model

var SampleSet = mongoose.model('SampleSet', sampleSetSchema);
module.exports = {

	SampleSet: SampleSet

}

答案 1 :(得分:0)

您的findData方法未返回任何内容。

docs传递给callbackcallback再次将docs返回findData方法。但findData没有回复。

因此,如果findData没有返回任何内容,getData将不会返回任何内容。