2014-10-22 2 views
0

У меня есть модель мангуста, определенная следующим образом:возникли проблемы вставки документов в MongoDB используя мангуст и node.js

module.exports = mongoose.model('vbDetail', { 

company_name: String, 
rowsdata: {vals: 
      { 
       date: Date, 
       transaction_type: String, 
       transaction_num: String, 
       due_date: Date, 
       amount: Number, 
       open_balance: Number, 
       balance: Number 
      } 
     }, 

meta_rows: [{ 
    identifier: String, 
    processing_date: Date, 
    processing_amount :Date, 
    notes: String 
}] 


}) 


}) 

Я пытаюсь вставить данные в формате JSON с API Quickbooks в Монго. Я использую следующий код для достижения этой цели:

//test 
for(var row in report["Rows"]["Row"]){ 
    while(count < companies){ 
     //console.log(report.Rows.Row[count].Header.ColData[0].value); 
     // save the rows corresponding to each client 
     for(var rowdata in report.Rows.Row[count].Rows.Row){ 
      for(var coldata in report.Rows.Row[count].Rows.Row[rowdata].ColData){ 
       var vbd = new vbDetail({ 
        company_name: report.Rows.Row[count].Header.ColData[0].value, 
        rowsdata: report.Rows.Row[count].Rows.Row[rowdata].ColData[coldata].value 

       }); 
      } 
     } 


     vbd.save(function(err){ 
     if(err) console.log(err); 
     }) 

     count++; 
     } 

} 

JSON выглядит следующим образом: Это укороченная версия.

{ Header: 
     { ColData: 
      [ { value: 'GunnChamberlain PL' }, 
      { value: '' }, 
      { value: '' }, 
      { value: '' }, 
      { value: '' }, 
      { value: '' }, 
      { value: '' } ] }, 
     Rows: 
     { Row: 
      [ { ColData: 
       [ { value: '03/10/2014' }, 
       { value: 'Bill' }, 
       { value: '2341' }, 
       { value: '03/10/2014' }, 
       { value: '500.0' }, 
       { value: '500.0' }, 
       { value: '500.0' } ], 
       type: 'Data' }, 
      { ColData: 
       [ { value: '04/30/2014' }, 
       { value: 'Bill' }, 
       { value: '4663' }, 
       { value: '04/30/2014' }, 
       { value: '450.0' }, 
       { value: '450.0' }, 
       { value: '950.0' } ], 
       type: 'Data' }, 
      { ColData: 
       [ { value: '05/31/2014' }, 
       { value: 'Bill' }, 
       { value: '4878' }, 
       { value: '05/31/2014' }, 
       { value: '875.0' }, 
       { value: '875.0' }, 
       { value: '1825.0' } ], 
       type: 'Data' }, 
      { ColData: 
       [ { value: '06/30/2014' }, 
       { value: 'Bill' }, 
       { value: '5115' }, 
       { value: '06/30/2014' }, 
       { value: '680.0' }, 
       { value: '680.0' }, 
       { value: '2505.0' } ], 
       type: 'Data' } ] }, 
     Summary: 
     { ColData: 
      [ { value: 'Total for GunnChamberlain PL' }, 
      { value: '' }, 
      { value: '' }, 
      { value: '' }, 
      { value: '2505.0' }, 
      { value: '2505.0' }, 
      { value: '' } ] }, 
     type: 'Section' }, 

я запускаю мой код, и я получаю эту ошибку в журнале:

[TypeError: Cannot use 'in' operator to search for '_id' in 2505.0] 

Мне нужно, чтобы выяснить, как получить ColData сохраненную в формате, заданном с помощью модели. В этом отношении я не знаю, где я ошибаюсь: модель или код, который я использую для создания документов.

Это то, что console.log(vbd) выглядит следующим образом:

{ company_name: 'GS & CO', 
_id: 54491e60dbd6350000000033, 
meta_rows: [], 
rowsdata: [] } 

{ company_name: 'GunnChamberlain PL', 
_id: 54491e60dbd635000000004f, 
meta_rows: [], 
rowsdata: [] } 

{ company_name: 'Simple Group, Inc.', 
_id: 54491e60dbd635000000005d, 
meta_rows: [], 
rowsdata: [] } 

{ company_name: 'SM Inc.', 
_id: 54491e60dbd6350000000079, 
meta_rows: [], 
rowsdata: [] } 

{ company_name: 'Think Holdings', 
_id: 54491e60dbd63500000000cd, 
meta_rows: [], 
rowsdata: [] } 

UPDATE

ответ Павла привели меня в правильном направлении, и я достиг того, что я хочу, используя следующий код:

//test 
      for(var row in report["Rows"]["Row"]){ 
       while(count < companies){ 
        //console.log(report.Rows.Row[count].Header.ColData[0].value); 
        // save the rows corresponding to each client 
        for(var rowdata in report.Rows.Row[count].Rows.Row){ 
         for(var coldata in report.Rows.Row[count].Rows.Row[rowdata].ColData){ 

          // save company name 
          var vbd = new vbDetail({ 
           company_name: report.Rows.Row[count].Header.ColData[0].value 

          }); 

          } 

          // save the row data per company 
          vbd.rowsdata = ({vals:{ 
                date: report.Rows.Row[count].Rows.Row[rowdata].ColData[0].value, 
                transaction_type: report.Rows.Row[count].Rows.Row[rowdata].ColData[1].value, 
                transaction_num: report.Rows.Row[count].Rows.Row[rowdata].ColData[2].value, 
                due_date: report.Rows.Row[count].Rows.Row[rowdata].ColData[3].value, 
                amount: report.Rows.Row[count].Rows.Row[rowdata].ColData[4].value, 
                open_balance: report.Rows.Row[count].Rows.Row[rowdata].ColData[5].value, 
                balance: report.Rows.Row[count].Rows.Row[rowdata].ColData[6].value 

               } 
              }) 
          console.log(vbd); 
          // Save the record to DB 
          vbd.save(function(err){ 
           if(err) console.log(err); 
          }) 
         } 



        count++; 
       } 


      } 
+3

Было бы неплохо, если эксперт, опрокидывающий вопрос, объясняет, почему он был опущен, так что я действительно не могу повторить ту же ошибку. – frishi

+0

По внешнему виду ошибки кажется, что документ, который вы пытаетесь сохранить, недействителен. Можете ли вы сделать console.log vdb перед сохранением, чтобы мы могли видеть, как выглядит модель до ее сохранения. – mattetre

+0

Согласен, нет ничего плохого в том, как вы задали этот вопрос, и вы предоставили больше деталей, чем многие. – Paul

ответ

1

Похоже, что ваш объект vbd не входит в сферу применения. Вы вызываете var vbd = new vbDetail(...) внутри вложенного цикла, который выходит за пределы области, когда вы вызываете .save()

+0

Спасибо! Я обновил вопрос с помощью кода, который закончился тем, что мне нужно. – frishi

Смежные вопросы