javascript 在mongodb find查询的条件中添加相同的字段

ijxebb2r  于 2023-02-15  发布在  Java
关注(0)|答案(2)|浏览(147)

我有一个mongodb集合testdata,其中包含一个名为insertTime的字段。我们需要删除超过60天的数据。因此,以前要从集合中删除所有超过60天的文档的旧数据-〉我会使用以下逻辑,首先找到删除日期,然后将其与updateTime进行比较:

var date = new Date();
var daysToDeletion = 60;
var deletionDate = new Date(date.setDate(date.getDate() - daysToDeletion));
deletionDate = deletionDate.toISOString()
printjson(insertDate);

db.testdata.find({"insertTime":{ $lt: deletionDate}})

但是现在,我想删除比记录的alive时间更早的数据。存活时间将计算为insertTime + endTime(60天)。现在,应该删除比此存活时间- 60天更早的文档。有人能帮我实现吗?
所有我能想到的是这样的东西,但我不认为命令是正确的:

db.testdata.find({"insertTime"+endTime:{ $lt: deletionDate}})

我如何在mongodb find命令查询中实现这一点?请提供关于这方面的见解。非常感谢。
我已经添加了以上所有的细节和我想达到的目标。

vsikbqxv

vsikbqxv1#

您可以使用$dateAdd(可从MongoDBv5.0+获得)来计算存活日期并与$$NOW进行比较

db.collection.find({
  $expr: {
    $lt: [
      {
        "$dateAdd": {
          "startDate": "$insertTime",
          "unit": "day",
          "amount": 60
        }
      },
      "$$NOW"
    ]
  }
})

Mongo Playground

dgsult0t

dgsult0t2#

我认为$expr可以帮助您:

var date = new Date();
var daysToDeletion = 60;
var deletionDate = new Date(date.setDate(date.getDate() - daysToDeletion));

db.testdata.deleteMany({
    $expr: {
        $lt: [{ $add: ["$insertTime", "$endTime"] }, deletionDate]
    }
});

编辑:使用与documentdb兼容的解决方案:

var date = new Date();
var daysToDeletion = 60;
var deletionDate = new Date(date.setDate(date.getDate() - daysToDeletion));

db.testdata.find(
    {
        $lt: {
            $add: [
                "$insertTime",
                { $multiply: [daysToDeletion, 24 * 60 * 60 * 1000] }
            ]
        },
        deletionDate
    }
);

相关问题