[英]Array.push(Object) inserts array of objects
我目前正在嘗試從我們的excel文件中讀取同事缺席的日子,並使用mongoose和express-js將它們存儲在mongodb中。
讀取數據可以正常工作,但是更新db中的數據總是會產生奇怪的行為,即使用Array.push()將對象插入到數組中會導致對象數組包含外部數組內的單個對象。
下面的函數從excel文件獲取原始數據,然后嘗試將其存儲在數據庫中。 請忽略代碼混亂,我只是在制作原型;-)
function getDaysOff( data, callback )
{
Member.find({}, function( err, docs ) {
if ( err )
{
console.error( err );
return [];
}
console.log( "found " + docs.length + " team members" );
docs.forEach( function( element ) {
// reset all arrays befor continuing
element.days_of_absence = [];
} );
data.forEach( function( element ) {
for ( let i = 0; i < element.length; ++i )
{
var member = element[i];
for ( let j = 0; j < docs.length; ++j )
{
if ( member.name.match( new RegExp( docs[j].name, 'g' ) ) )
{
console.log( member.name + " is " + docs[j].name );
for ( let k = 0; k < member.absent.length; ++k )
{
docs[j].days_of_absence.push( member.absent[k] );
console.log( JSON.stringify( member.absent[k] ) );
}
console.log( JSON.stringify( docs[j].days_of_absence ) );
break;
}
}
}
} );
docs.forEach( function( element ) {
element.save();
} );
callback( docs );
});
}
這是成員架構:
var mongoose = require('mongoose')
var MemberSchema = new mongoose.Schema(
{
_id: {
type: 'ObjectId'
},
name: {
type: 'String'
},
prename: {
type: 'String'
},
days_of_absence: {
type: 'Array'
}
}
);
module.exports = mongoose.model('Member', MemberSchema, 'members');
當打印days_of_absence
它會生成如下內容:
[
[ { "date": "2018-01-28T23:00:00.000Z", "reason": "P" } ],
[ { "date": "2018-01-29T23:00:00.000Z", "reason": "P" } ],
...
[ { "date": "2018-09-27T22:00:00.000Z", "reason": "P" } ]
]
其中members.absent[k]
等於內部數組內的對象。 (我已經檢查過了)。 但是我不知道對象周圍的數組來自哪里。 我想念什么? 我想要的是這樣的:
[
{ "date": "2018-01-28T23:00:00.000Z", "reason": "P" },
{ "date": "2018-01-29T23:00:00.000Z", "reason": "P" },
...
{ "date": "2018-09-27T22:00:00.000Z", "reason": "P" }
]
UPDATE
如建議的那樣,我已經測試了member.absent[k]
是否為數組,但是在循環中打印它表明不是。 console.log( member.absent[k] )
產生所需的結果:
{"date":"2018-09-02T22:00:00.000Z","reason":"P"}
看起來,您有一個member.absent[k]
數組。 您可以傳播它並得到一個對象。
docs[j].days_of_absence.push(...member.absent[k]);
我不知道該值是否總是一個數組,您可以創建一個並進行傳播。
docs[j].days_of_absence.push(...(
Array.isArray(member.absent[k])
? member.absent[k]
: [member.absent[k]]
));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.