Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose:如果满足条件,则从Mongo中的对象数组中删除元素_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

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

Javascript Mongoose:如果满足条件,则从Mongo中的对象数组中删除元素,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我有一个对象数组,它存储API请求的日期以及请求和响应的JSON值。问题是我不想让这个日志变得庞大。我需要设置最大限制或删除早于特定日期的条目 我试图使用mongo/mongoose查询来删除数组中日期值大于5天的元素 这是mongo模型的相关部分: log: [ { select: false, date: { type: Date, default: Date.now,

我有一个对象数组,它存储API请求的日期以及请求和响应的JSON值。问题是我不想让这个日志变得庞大。我需要设置最大限制或删除早于特定日期的条目

我试图使用mongo/mongoose查询来删除数组中日期值大于5天的元素

这是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

如果有办法在对象数组中设置entires的最大值,并在插入新条目时自动弹出最早的条目,这也适用于我。

基于您的模式
日志
只是一个包含字段
日期
的文档数组,因此如果您想为该字段建立条件,您的更新可以如下所示:

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

开枪,想回答同样的问题;-)@如果你认为这是正确的答案,你可以随时投票从未!不,只是开玩笑,但是像你这样的人,像我这样一个可怜的新手怎么能从一开始就赢得他们的选票呢-p这非常接近,只是它删除了日志中的每个条目。不仅仅是五天前的东西。@AndrewTaylor
$gte
将删除五天前更新的东西,因此您需要
$lte