Как удалить, кроме последних 10 записей, используя Mongodb или Mongoose Lib? - PullRequest
0 голосов
/ 11 февраля 2019

Я использую этот запрос:

db.date.remove({
    _id:{ $not:{ $eq: ObjectId("570ba4f66931b8f21a8bf25f") }},
    date:{ $lt: outdated }
})

Но он не работает должным образом.Мне не нужно давать идентификаторы.

Как удалить (удалить), кроме последней 10 записи?

1 Ответ

0 голосов
/ 12 февраля 2019

Это можно сделать, выполнив итерацию по отсортированному списку коллекций, и вы можете продолжить для 10 или указанных N записей, а затем удалить после него как db.collectionName.remove({_id:ObjectId(<IteratorID>)})

Давайте посмотримв деталях от вставки записей и затем доказательства концепции для удаления

Вставка 19 записей в коллекцию st2 (только для проверки правильности сценария) в оболочке Монго:

> for(var i =1; i<20;i++) { db.st2.insert({"a":i}) }
> 

Некоторые записи выглядят так:

> db.st2.find()
{ "_id" : ObjectId("5c62e71d6ddb127f4e87dfc4"), "a" : 1 }
{ "_id" : ObjectId("5c62e7476ddb127f4e87dfc5"), "a" : 2 }
...
...

Просто для повторения и печати значений, которые будут удалены [Это только для проверки подлинности скрипта]

> var counter = 0;
> var allRecords = db.st2.find().sort({ "_id" : -1});
> var totalElements= allRecords.count()
> for(var i = 0; i<totalElements; i++) { if (i<=10) {allRecords.next();continue;} var currentRecord = allRecords.next(); print(currentRecord._id); print(currentRecord.a)};
ObjectId("5c62e7476ddb127f4e87dfcb")
8
ObjectId("5c62e7476ddb127f4e87dfca")
7
ObjectId("5c62e7476ddb127f4e87dfc9")
6
....
....

Вместо того, чтобы печатать записи с идентификатором, просто удалите его как db.collectionName.remove({_id:currentRecord._id}), отметьте его ниже:

> var allRecords = db.st2.find().sort({ "_id" : -1});
> 
> var totalElements= allRecords.count()
> totalElements
19
> for(var i = 0; i<totalElements; i++) { if (i<=10) {allRecords.next();continue;} var currentRecord = allRecords.next(); db.st2.remove({_id:currentRecord._id});};
WriteResult({ "nRemoved" : 1 })
> var totalElements= allRecords.count()
> totalElements
11
>

Он удалил более старые записи и оставил только 11 записей.просто проверьте условие if, и вы точно можете оставить с N записями или чем угодно.

Надеюсь, это поможет вам лучше понять его, так как я постарался охватить его полными деталями, чтобы выили кто-то может получить пользу от этих примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...