node.js - 如何在 mongoose 查询 .find() 中调用 remove()?
问题描述
我正在使用 Mongoose 查询一个名为“orders”的整个 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 语句为真时删除该文档。但我收到此错误“消息:'No _id found on document!',名称:'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 字段等于“某物”的订单集合中删除特定文档,如下所示。
db.users.remove( { _id : "something" } )
推荐阅读
- api - Mapbox API /styles/v1/{username} 不反映最新的样式数据
- python - 如何根据级别将 agg 应用于具有不同功能的多索引数据框?
- node.js - Stripe Connect PaymentIntent 错误:没有这样的 payment_intent
- c# - 数据网格视图中的参数超出范围异常
- java - 排序对列表java
- javascript - 无法在可折叠的力有向图 d3.js 中输入文本
- php - 如果没有从管理端添加图像,则隐藏 img 标签
- python - ModuleNotFoundError 在从 importlib 导入的模块上使用“经典”导入
- php - 在 PHP 中读取多维数组
- javascript - 如果没有从 URL 调用返回响应,则从 URL 获取响应并停止进一步处理的最佳方式