mongoose 在MongoDB 6中通过特定字段删除重复项

gwo2fgha  于 2023-06-30  发布在  Go
关注(0)|答案(1)|浏览(85)

请帮帮我。使用Mongoose,我想检查“ViolationID”字段中是否有重复项,并删除它们,除了最后创建的一个。我想,_id:{ $lt:record._id }工作不正确。可能是某些类型的_id或记录。_id不匹配。我很困惑,因为文件在集合中不删除。

Violation.find({}, { "ViolationID": 1 })
    .sort({ _id: 1 })
    .then((violations) => {
      violations.forEach(function (record) {
        Violation.deleteMany({
          _id: { $lt: record._id },
          "ViolationID": record["ViolationID"],
        });
      });
});

不能删除的单据下面

{
_id": "649adc629b36c9ee95228d96",
"ViolationID": 98,
},
{
"_id": "649add653629f115a960d498",
"ViolationID": 98
}

我试过这个Remove duplicate documents based on field和其他线程,这些情况不适合我

4szc88ey

4szc88ey1#

我不明白为什么它不工作。无论如何,可能的方法是这样的:

let docs = []
db.collection.aggregate([
   {
      $setWindowFields: {
         partitionBy: "$ViolationID",
         sortBy: { _id: -1 },
         output: {
            pos: { $documentNumber: {} }
         }
      }
   },
   { $match: { pos: { $gt: 1 } } },
   { $project: { _id: 1 } }
]).toArray().forEach(doc => {
   docs.push(doc._id);
   if (docs.lenght > 10000) {
      db.collection.deleteMany({ _id: { $in: docs } });
      docs = [];
   }
})
if (docs.lenght > 0)
   db.collection.deleteMany({ _id: { $in: docs } });

相关问题