node.js - 如何使用 Mongodb 或 mongoose lib 删除最新的 10 条记录?
问题描述
我正在使用这个查询:
db.date.remove({
_id:{ $not:{ $eq: ObjectId("570ba4f66931b8f21a8bf25f") }},
date:{ $lt: outdated }
})
但它不能正常工作。我不需要提供身份证。
除了最新的 10 条记录,如何删除(删除)?
解决方案
它可以通过迭代集合的排序列表来完成,您可以继续10
或指定N
记录,然后在它之后删除db.collectionName.remove({_id:ObjectId(<IteratorID>)})
让我们看看插入记录的细节,然后是删除它的概念证明
在 mongo shell的集合中插入 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
....
....
代替打印带有 id 的记录,只需将其删除,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
记录或任何您想要的东西。
希望这将帮助您以更好的方式理解它,因为我试图用完整的细节来涵盖它,以便您或某人可能会从这些示例中受益。
推荐阅读
- python - 使用sklearn计算最近邻图?
- php - 无法从照明转换为整数
- javascript - 链接页面更改不触发动画
- javascript - 尝试运行发布请求时出现Angular 8未知错误
- flutter - 在 test/ 和 example/ 之间共享 .dart 文件
- python - 如何使用 Selenium 和 Python 在 HTML 中存在特定元素时模拟按下箭头键
- java - return 语句后方法不退出
- cuda - 用 CUDA “预热” GPU 的最佳方法是什么?
- stata - 如果在面板数据中观察到 1,则生成一个等于 1 的变量
- wysiwyg - 在所见即所得编辑器中管理图像删除