У меня есть модель мангуста, определенная следующим образом:возникли проблемы вставки документов в 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++;
}
}
Было бы неплохо, если эксперт, опрокидывающий вопрос, объясняет, почему он был опущен, так что я действительно не могу повторить ту же ошибку. – frishi
По внешнему виду ошибки кажется, что документ, который вы пытаетесь сохранить, недействителен. Можете ли вы сделать console.log vdb перед сохранением, чтобы мы могли видеть, как выглядит модель до ее сохранения. – mattetre
Согласен, нет ничего плохого в том, как вы задали этот вопрос, и вы предоставили больше деталей, чем многие. – Paul