Как мне вызвать remove () в запросе mongoose .find ()? - PullRequest
0 голосов
/ 04 апреля 2019

Я запрашиваю у Mongoose целую коллекцию, называемую «заказами».Затем я получаю разницу в днях между созданием заказа и текущей датой.Когда прошло определенное количество дней, я хочу удалить документ (заказ) из БД.

Я перебираю заказы в цикле for, поэтому, когда цикл находит заказ с разницей в количестве x дней, я просто пытаюсь вызвать 'orders [i] .remove ()'.Это ближе к нижней части предоставленного блока кода.

Я заметил, что метод remove () находится в Model.prototye, а не в Document.prototype.Но я видел другие блоки кода, где рекомендуется вызывать remove () в запросе find ().

Order.find({},'-_id -line_items -shipping_lines', function(err, orders) {
        if(err) {
            console.log(err);
        }
        for(i = 0; i < orders.length; i++) {
            // Taken from Punit Jajodia https://www.toptal.com/software/definitive-guide-to-datetime-manipulation
            const dateOfOrder = orders[i].date;
            const now = new Date();
            const datefromAPITimeStamp = (new Date(dateOfOrder)).getTime();
            const nowTimeStamp = now.getTime();

            const microSecondsDiff = Math.abs(datefromAPITimeStamp - nowTimeStamp );
            // Number of milliseconds per day =
            //   24 hrs/day * 60 minutes/hour * 60 seconds/minute * 1000 msecs/second
            const daysDiff = Math.floor(microSecondsDiff/(1000 * 60 * 60  * 24));

            console.log(daysDiff);

            // If it is exactly 15 days from the triggering order, post the new order
            if (daysDiff === 15) {

                // ?consumer_key=${process.env.CONS_KEY}&consumer_secret=${process.env.CONS_SEC}

                //console.log(orders[i]);

                axios.post(baseUrl + `/orders?consumer_key=${process.env.CONS_KEY}&consumer_secret=${process.env.CONS_SEC}`, orders[i])
                .then(function (response) {
                    console.log(response.data);

                })
                .catch(function (error) {
                    // handle error
                    console.log(error.response.status);
                    // console.log(error);
                })
                .then(function () {

                });
            }

            if (daysDiff === 0) {
                //Remove orders that are 25 days old from the db
                orders[i].remove(function(err,result) {
                    if(err) {
                        console.log(err);
                    }
                    console.log(result);
                });
            }
        }
    });

Я ожидал, что документ будет удален, если утверждение if верно.Но я получаю это сообщение об ошибке: «_id не найден в документе!», Имя: «MongooseError» «Я также просматриваю заказы в mlab, и на них определенно есть« _id ».

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Хорошо.Вот самый большой лицевой щиток за последние два дня:

В моем .find() Запросе я намеренно (случайно) пропустил _id с:

Order.find({},'-_id -line_items -shipping_lines', function(err, orders) { ...

Это вызвало orders[i]._id быть неопределенным в моем цикле for.Мы живем, чтобы закодировать другой день.

0 голосов
/ 04 апреля 2019

Я думаю, ваш запрос на удаление не в правильном формате.Попробуйте еще раз, как показано ниже:

        if (daysDiff === 0) {
            //Remove orders that are 25 days old from the db
            Order.remove({_id: orders[i]._id },function(err,result) {
                if(err) {
                    console.log(err);
                }
                console.log(result);
            });
        }

Например: до удалить определенные документы из коллекции заказов, где поле _id равно «что-то», работает, как показано ниже.

db.users.remove( { _id : "something" } )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...