Удалить данные из базы данных - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть чат с Firebase, и мне нужно удалить все сообщения, созданные более 12 часов, для этого у меня есть этот код

    let date        = new Date();
    let timestamp = new Date(date.toLocaleString("en-US", { timeZone: "America/New_York" }));
    timestamp       = Math.floor((timestamp.getTime() - (1 * 12 * 60 * 60 * 1000)) / 1000);

    chatRef.on('value', snapshot => {
        let data = snapshot.val(); 

        if(OBJECT_EXIST(data))
        {
            Object.keys(data).forEach(key => {
                if(OBJECT_EXIST(data[key]))
                {

                    if(snapshot.hasChild(key))
                    {
                        let child = key;
                        let count = 0   

                        chatRef.child(key).on('value', snapshot => {
                            let data_ = snapshot.val();

                            if(data_ != key)
                            {
                                let last = Object.keys(data_).length - 1;

                                Object.keys(data_).forEach((key, index) => {
                                    if(index < last)
                                    {
                                        if(OBJECT_EXIST(data_[key].created_at))
                                        {
                                            if(timestamp > data_[key].created_at)
                                            {
                                                chatRef.child(child).child(key).remove();
                                                count++;
                                            }
                                        }
                                    }
                                });
                            }

                        });

                        console.log('Room '+child+': '+count+' messages remove');
                    }
                }
            });
        }
    });

Этот код не работает вообще потому что, когда нужно удалить много сообщений, требуется слишком много времени, чтобы завершить sh выполнение, а console.log(), который у меня есть ниже, чтобы узнать, сколько сообщений было удалено, появляется много раз, и счетчик достигает уровней до 3 или В 4 раза выше, чем вы должны мне дать.

Я что-то не так делаю? У меня есть этот код в функции в задании cron, которое выполняется каждый час, и он не удаляет все сообщения, если удаляется около 200 сообщений, удаляется только около 15, и если я выполняю функцию локально, если вы удаляете их все, но тогда это занимает слишком много времени и все console.log() выходят, когда их не должно быть так много .

Структура, которую я использую в базе данных, такова:

- Chat
  - Room
    - Messages

Где может быть неограниченное количество комнат

Что я делаю? Неверно, или как я могу улучшить свою функцию, чтобы она не занимала так много времени, если нужно удалить много сообщений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...