簡體   English   中英

如何在mongoose查詢.find()中調用remove()?

[英]How do I call remove() within mongoose query .find()?

我正在用Mongoose查詢一個叫做“命令”的整個Mongodb集合。 然后,我得到訂單創建和當前日期之間的天數差異。 當它已經過一定天數時,我想從數據庫中刪除文檔(訂單)。

我在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語句真實時刪除文檔。 但是我得到了這個錯誤“消息:'沒有在文檔中找到_id!',名稱:'MongooseError'”我也在查看mlab中的訂單,它們肯定有'_id'。

我猜您的刪除查詢格式不正確。 嘗試如下:

        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”的特定文檔,如下所示。

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

好。 這是過去兩天最大的一面:

在我的.find()查詢中,我故意(意外地) .find()_id

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

這導致orders[i]._id在我的for循環中未定義。 我們活到另一天的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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