Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.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
Node.js 如何使用Mongodb或mongoose库删除除最新10条记录之外的其他记录?_Node.js_Mongodb_Mongoose_Mongodb Query - Fatal编程技术网

Node.js 如何使用Mongodb或mongoose库删除除最新10条记录之外的其他记录?

Node.js 如何使用Mongodb或mongoose库删除除最新10条记录之外的其他记录?,node.js,mongodb,mongoose,mongodb-query,Node.js,Mongodb,Mongoose,Mongodb Query,我正在使用此查询: db.date.remove({ _id:{ $not:{ $eq: ObjectId("570ba4f66931b8f21a8bf25f") }}, date:{ $lt: outdated } }) 但它不能正常工作。我不需要提供身份证 如何删除(删除)除最新10条记录之外的记录?可以通过迭代已排序的集合列表来完成,您可以继续删除10或指定的N记录,然后将其作为db.collectionName.remove({u id:ObjectId()})删除。

我正在使用此查询:

db.date.remove({
    _id:{ $not:{ $eq: ObjectId("570ba4f66931b8f21a8bf25f") }},
    date:{ $lt: outdated }
})
但它不能正常工作。我不需要提供身份证


如何删除(删除)除最新10条记录之外的记录?

可以通过迭代已排序的集合列表来完成,您可以继续删除
10
或指定的
N
记录,然后将其作为
db.collectionName.remove({u id:ObjectId()})删除。

让我们看一下插入记录的细节,然后是删除记录的概念证明

在mongo shell中的集合
st2
(仅用于检查脚本的正确性)中插入19条记录:

> for(var i =1; i<20;i++) { db.st2.insert({"a":i}) }
> 
只是迭代并打印将被删除的值[这仅用于脚本验证目的]

> 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
....
....
它删除了旧的记录,只留下11条记录。只需检查if条件,就可以留下
N
记录或任何您想要的内容


希望这将帮助您更好地理解它,因为我试图用完整的细节来涵盖它,以便您或某人可以从这些示例中受益

您可以通过两个步骤完成此操作。1) 从末尾查找第10个id。2) 删除id小于刚找到的id的所有内容。如果同时发生插入,这可能会给您留下超过10个文档。hi@SergioTulentsev,它在将来不是10个,它将是动态值,因此我需要删除除最新N条记录之外的其他文件是,是,这就是它要做的,我会试试看@SergioTulentsev@Angu查看有关如何使用shell脚本删除mongo shell上旧记录的详细信息。
> 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
....
....
> 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
>