簡體   English   中英

Array.push(Object)插入對象數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM