我如何在猫鼬查询.find()中调用remove()?

时间:2019-04-04 04:53:30

标签: node.js mongodb express mongoose

我正在用Mongoose查询整个Mongodb集合,称为“ orders”。然后,我得到订单创建和当前日期之间的天数差异。经过一定天数后,我想从数据库中删除文档(订单)。

我正在for循环中遍历订单,因此当循环找到x天数相差的订单时,我只是在尝试调用“ orders [i] .remove()”。这位于提供的代码块的底部。

我注意到'remove()'方法在Model.prototye上,而不在Document.prototype上。但是我看到了其他代码块,建议在“ find()”查询中调用“ remove()”。

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语句为true时删除该文档。但是我得到这个错误“消息:'在文档上找不到_id!',名称:'MongooseError'”。我也在查看mlab中的订单,肯定在它们上有一个'_id'。

2 个答案:

答案 0 :(得分:0)

我猜您的删除查询格式不正确。尝试如下操作:

        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字段等于“ something”的订单集合中remove来处理特定文档,如下所示。

db.users.remove( { _id : "something" } )

答案 1 :(得分:0)

好吧。这是最近两天最大的脸部护理:

在我的.find()查询中,我有意地(偶然地)将_id遗漏为:

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

这导致orders[i]._id在我的for循环中未定义。我们改天编码。