在node.js中,如何使用node.js和mongodb以多个级别存储数据

时间:2013-03-10 19:32:18

标签: node.js mongodb

我遇到了一个有线问题,当我使用mongodb存储数据时,有些数据丢失,我认为这是因为它的异步功能

所以对于这个列表的时间表,我会用re

/ *这是一个应用程序,通过使用train_uid,今天, * /

var today = new Date();
var day = today.getDay();
scheduleModel.findByTrainAndTime(train_uid,today,function(err, doc){
    var a = new Object();
    if(err){}
    else{
        if(doc != null)
        {   

// mongodb数据库可以给我一些关于train_id,uid的数据

        a.train_uid = doc.train_uid;
        a.train_id = train_id;

最重要的是列车时刻表时间表,列车时刻表时间表是json对象的列表(doc.time_schedule),如到达,离开和tiploc。但是,我需要将tiploc更改为sanox编号,referenceModel可以通过提供tiploc编号来帮助查找sanox。

                   //doc.time_schedule
                   // here is to add a array

所以我使用async,对于列表中的每个项目,我使用referenceModel查询sanox并构造一个数组 - a.timeline来存储每个b,最后当异步每个操作完成时,trainModel将存储一个对象一个sanox对象的数组。但是当谈到mongodb数据库时,只有sanox对象的数组是空的,我想这是因为异步操作,但是因为我使用了异步,为什么它不起作用

                    a.train_uid = doc.train_uid;  //works
        a.train_id = train_id;   works
                    a.timeline = []   // doesn't work    
        a.timeline = new Array();                                               
        var b ;
            async.forEachSeries(doc.time_schedule,
              function(item,callback){
                   referenceModel.findStanoxByTicloc(item.tiploc_code,function(err,sanox){ 
                      try{ 
                        b = new Object();
                                            b.sanox = sanox;
                        a.time.push(b);

                      }catch(err2){

                      }
                  });   
                  callback();
              },
              function(err){
                trainModel.createNewTrain(a,function(){}); 

        }
    }
 });

1 个答案:

答案 0 :(得分:0)

在您启动异步callback之后,但在它实际返回之前,您正在调用find。您需要等到获得数据后才能这样做。以下应该会更好:

    async.forEachSeries(doc.time_schedule,
          function(item,callback){
             referenceModel.findStanoxByTicloc(item.tiploc_code,function(err,sanox){ 
                  try{ 
                    b = new Object();
                    b.sanox = sanox;
                    a.time.push(b);

                  }catch(err2){

                  }
                  callback();
              });   
          },
          function(err){
            trainModel.createNewTrain(a,function(){}); 

    }