Mongo删除最后的文档。

17
我想知道如何删除我的集合中最后插入的100个文档,例如。 如何从shell中实现?
1个回答

19

你应该能够使用_id来按最后插入的顺序排序,如这里中所述:

db.coll.find().sort({_id:-1}).limit(100);

看起来标准的mongo删除操作不支持使用限制,因此您可以使用类似以下方式删除100个文档:

for(i=0;i<100;i++) {
    db.coll.findAndModify({query :{}, sort: {"_id" : -1}, remove:true})
}

查看文档以获取有关findAndModify的更多信息。

6
这个回答存在一些问题。1)你假设他的_id值是单调递增的。但如果它们不是,2)你建议运行一个循环100次,而不是只需要一条删除语句db.coll.remove({_id:{$gte:<value-of-100th-id>} - Asya Kamsky
1
我所指出的答案表明 _id 将返回最近的项目:"如果您使用自动创建的 _id 字段,它会嵌入一个日期...因此您可以使用它来排序"。在某些情况下(例如当数据库被分片时),这不是准确的吗?无论如何,我肯定同意单个调用将更有效 - 谢谢! - bcm360
2
他们指出了如果您使用_id的问题 - 但不要忘记人们可以提供自己的_id值,这可能会分布不同,并且_id是在客户端上生成的 - 如果他们有多个客户端,则其中一些时钟可能会出现偏差! - Asya Kamsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接