【发布时间】:2019-06-04 13:37:12
【问题描述】:
我有一个对象数组,用于存储 API 请求的日期以及请求和响应的 JSON 值。问题是我不希望这个日志变得庞大。我需要设置最大限制或删除早于特定日期的条目。
当对象的日期值大于 5 天时,我正在尝试使用 mongo / mongoose 查询来删除数组的元素。
这是mongo模型的相关部分:
log: [
{
select: false,
date: {
type: Date,
default: Date.now,
select: false
},
request: { type: String, select: false },
response: { type: String, select: false }
}
]
我尝试过使用 updateMany 和 $pull
const fiveDaysAgo = moment()
.subtract(5, 'day')
.format('YYYY-MM-DD');
// Ensure log value exists in collection
// Remove any log entry older than five days
Collection.updateMany(
{ log: { $exists: true } },
{ $pull: { 'log.$[].date': { $gte: fiveDaysAgo } } }
).then(data => console.log(data));
这会产生这个错误:
(node:1957) UnhandledPromiseRejectionWarning: MongoError: Cannot apply $pull to a non-array value
如果有办法在对象数组中设置整数的最大值,并在插入新条目时自动弹出最旧的条目,这也适用于我。
【问题讨论】:
标签: javascript node.js mongodb mongoose