如何将MongoDB数据存储到javascript变量?

时间:2017-11-02 12:45:54

标签: json node.js mongodb express mongoose

{{1}}

我想将MongoDB数据(foundHomePlayers)存储到javascript变量(liveJSON)。但是这种语法不起作用?如何将整个foundHomePlayers存储到javascript变量?

2 个答案:

答案 0 :(得分:0)

看起来您误解回调是异步的,并且在触发它们的事件发生之前不会触发,因此尝试将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);
    }
});

答案 1 :(得分:0)

是的,因为node.js具有异步特性,所以它不等待mongodb callback的回复。 如果要将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)
});