首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除mongodb中的N个文档号

如何删除mongodb中的N个文档号
EN

Stack Overflow用户
提问于 2013-09-28 09:53:08
回答 10查看 65.5K关注 0票数 73

在我的集合中,文档包含状态和时间戳之类的键。当我想找到最新的10个文档时,我会编写以下查询

代码语言:javascript
运行
复制
db.collectionsname.find().sort({"timestamp"-1}).limit(10)

这个查询给出了我想要的结果,但是当我想删除最新的10个文档时,我编写了下面的查询

代码语言:javascript
运行
复制
db.collectionsname.remove({"status":0},10).sort({"timestamp":-1})

但是它显示了下面的错误TypeError: Cannot call method 'sort' of undefined,我再次编写了与db.collectionsname.remove({"status":0},10)下面相同的查询,它只删除一个文档。那么,如何编写一个查询,删除10个最新文档并在时间戳上进行排序?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2013-09-28 11:15:21

在使用removefindAndModify时,不能设置限制。因此,如果要精确限制删除的文档数量,则需要分两步完成。

代码语言:javascript
运行
复制
db.collectionName.find({}, {_id : 1})
    .limit(100)
    .sort({timestamp:-1})
    .toArray()
    .map(function(doc) { return doc._id; });  // Pull out just the _ids

然后将返回的_ids传递给remove方法:

代码语言:javascript
运行
复制
db.collectionName.remove({_id: {$in: removeIdsArray}})

FYI:不能从有上限的集合中删除文档。

票数 96
EN

Stack Overflow用户

发布于 2018-12-27 12:32:39

让N是要删除的记录数。

代码语言:javascript
运行
复制
    db.collectionName.find().limit(N).forEach(doc => 
     { 
       db.collectionName.remove({_id:doc._id})
     }
    )
票数 25
EN

Stack Overflow用户

发布于 2020-03-19 16:34:00

您可以将查找查询映射的输出管道到使用_id并执行基于$in查询的删除,例如:

代码语言:javascript
运行
复制
db.collection.remove({_id: 
    { $in: db.collection.find().sort({timestamp:-1}).limit(100).map(a => a._id) }
})
票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19065615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档