2015-11-06 176 views
0

我意識到這聽起來像一個完全多餘的問題,但只是聽到我出去。如何用Node.js查詢Mongo?

最終我想從dom中查詢MongoDB,但在此之前,我可以從我的路由模塊中進行操作。這裏是我的查詢:

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

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

'sampleSet'是我查詢的集合的名稱。 getData函數應該從MongoDB獲取數據。我把它放在MongoClient的連接函數的回調中,因爲我無法用其他方式來計算。從我的角度來看,由於getData()正在返回一個回調函數,它應該返回數據。但事實並非如此。 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(); 
    }); 
    } 
}); 
+1

'res.jsonp'將最終使用'getData'調用的返回值(這不算什麼) –

回答

0

您的findData方法沒有返回任何東西。

它傳遞docscallbackcallback再次返回到docs方法findData。但從findData沒有返回。

因此,如果findData沒有返回任何東西,getData不會返回任何東西。

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 
 
    // .. 
 
    // .. 
 
}, { 
 
\t collection: "sampleSet" // collection name 
 
}); 
 

 

 

 
// // Export the Mongoose model 
 

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

 
\t SampleSet: SampleSet 
 

 
}