在我的集合中,文档包含状态和时间戳之类的键。当我想找到最新的10个文档时,我会编写以下查询
db.collectionsname.find().sort({"timestamp"-1}).limit(10)这个查询给出了我想要的结果,但是当我想删除最新的10个文档时,我编写了下面的查询
db.collectionsname.remove({"status":0},10).sort({"timestamp":-1})但是它显示了下面的错误TypeError: Cannot call method 'sort' of undefined,我再次编写了与db.collectionsname.remove({"status":0},10)下面相同的查询,它只删除一个文档。那么,如何编写一个查询,删除10个最新文档并在时间戳上进行排序?
发布于 2013-09-28 11:15:21
在使用remove或findAndModify时,不能设置限制。因此,如果要精确限制删除的文档数量,则需要分两步完成。
db.collectionName.find({}, {_id : 1})
.limit(100)
.sort({timestamp:-1})
.toArray()
.map(function(doc) { return doc._id; }); // Pull out just the _ids然后将返回的_ids传递给remove方法:
db.collectionName.remove({_id: {$in: removeIdsArray}})FYI:不能从有上限的集合中删除文档。
发布于 2018-12-27 12:32:39
让N是要删除的记录数。
db.collectionName.find().limit(N).forEach(doc =>
{
db.collectionName.remove({_id:doc._id})
}
)发布于 2020-03-19 16:34:00
您可以将查找查询映射的输出管道到使用_id并执行基于$in查询的删除,例如:
db.collection.remove({_id:
{ $in: db.collection.find().sort({timestamp:-1}).limit(100).map(a => a._id) }
})https://stackoverflow.com/questions/19065615
复制相似问题