gpt4 book ai didi

javascript - Mongoose:如果满足条件,则从 Mongo 中的对象数组中删除元素

转载 作者:可可西里 更新时间:2023-11-01 10:08:50 35 4
gpt4 key购买 nike

我有一个对象数组,用于存储 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

如果有一种方法可以在对象数组中设置一个最大值,并在插入新条目时自动弹出最旧的条目,那对我来说也适用。

最佳答案

根据您的模式 log 只是一个包含字段 date 的文档数组,因此如果您想为该字段构建条件,您的更新可以如下所示:

Collection.updateMany(
{ log: { $exists: true } },
{ $pull: { 'log': { date: { $lte: fiveDaysAgo } } } }
).then(...)

关于javascript - Mongoose:如果满足条件,则从 Mongo 中的对象数组中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115887/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com