【问题标题】:How can I store MongoDB data to a javascript variable?如何将 MongoDB 数据存储到 javascript 变量中?
【发布时间】:2018-04-15 00:00:06
【问题描述】:
var liveJSON = [];
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
if (err) {
console.log(err);
} else {
liveJSON = foundHomePlayers; <<<<------ HERE!
}
});
我想将 MongoDB 数据 (foundHomePlayers) 存储到 javascript 变量 (liveJSON) 中。但是这种语法不起作用?如何将整个 foundHomePlayers 存储到 javascript 变量中?
【问题讨论】:
标签:
json
node.js
mongodb
express
mongoose
【解决方案1】:
您似乎误解了回调是异步的,并且在触发它们的事件发生之前不会触发,因此尝试将 mongo 数据存储在全局变量中是没有用的 - 就像在您的示例中一样。
var liveJSON = [];
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
if (err) {
console.log(err);
} else {
liveJSON = foundHomePlayers; <<<<------ HERE!
}
});
liveJSON // This will not be defined yet because the callback is async
我的替代建议是您触发一个函数,该函数可以在获取 liveJSON 数据后进行处理,而不是依赖于全局变量:
function doSomethingWithLiveJSON(liveJSON) {
console.log(liveJSON);
}
Player.find({teamName: req.query.homeTeam}, function(err, foundHomePlayers){
if (err) {
console.log(err);
} else {
doSomethingWithLiveJSON(foundHomePlayers);
}
});
【解决方案2】:
是的,因为 node.js 遵循异步特性,它不会等待来自 mongodb 回调的回复。
如果要将 mongodb 数据保存到 javascript 变量中,请创建一些函数将数据存储到变量中
var express=require('express');
var mongoClient = require('mongodb').MongoClient;
var app= express();
var url="mongodb://localhost:27017";
var g=[];
app.get('/',(req,res)=>{
mongoClient.connect(url,(err,db)=>{
var mydb=db.db('mongopract');
mydb.collection('practice').find({name:"solkar"},{projection:{_id:0,name:1,id:2}}).toArray((err,result)=>{
if(err){
throw err;
}else if(result.length){
storedata(result[0].name);
res.send('info'+JSON.stringify(result[0].name));
}else{
res.send('no data found');
}
})
})
});
function storedata(x){
g.push(x);
console.log(g);
}
var PORT=process.env.PORT||3001;
app.listen(PORT,()=>{
console.log('port numebr'+PORT)
});