我希望能弄清楚为什么我在MongoDB capped集合中看不到我所期望的东西。
不能从有上限的集合中删除文档。若要从集合中删除所有文档,请使用drop()
方法删除集合,然后重新创建有上限的集合。
然而,我能够删除文件从我的上限收集,从它似乎?
使用MongoDB 6.0.1
:
test> db.createCollection("cappyMcCapCap", { "capped": true, "size": 100000, "max": 100 } )
{ ok: 1 }
test> db.cappyMcCapCap.isCapped()
true
到目前为止一切顺利,现在我将插入两个文档:
test> db.cappyMcCapCap.insertOne({ "hat": "bowler" });
{
acknowledged: true,
insertedId: ObjectId("63a4c2dffe0ea68c13a8c265")
}
test> db.cappyMcCapCap.insertOne({ "hat": "newsboy" });
{
acknowledged: true,
insertedId: ObjectId("63a4c2e9fe0ea68c13a8c266")
}
然后删除两个文档中的"较新"文档:
test> db.cappyMcCapCap.deleteOne({ "hat": "newsboy" });
{ acknowledged: true, deletedCount: 1 }
哪个是成功的?
test> db.cappyMcCapCap.find();
[ { _id: ObjectId("63a4c2dffe0ea68c13a8c265"), hat: 'bowler' } ]
我似乎记得也许得到了一个错误,在过去,但我没有尝试手动删除文档从一个封顶的集合在一段时间。
那么,文档是正确的,还是我误解了什么?
- 更新**
我也在MongoDB 5.0.14
中尝试了这个方法,得到了相同的结果(我可以删除文档)。
然而,然后我尝试MongoDB 4.2.23
,并得到一个:
... "errmsg" : "cannot remove from a capped collection: test.cappyMcCapCap"
正如我所料。看起来这在最近的版本中有所改变?
1条答案
按热度按时间ljsrvy3e1#
根据MongoDB论坛中的post:
我确实在内部复制和缩放了它。我想告诉你,MongoDB〉5. 0取消了apply operations命令中对删除操作的限制。
然而,我们似乎还没有将此添加到文档中。我已经提交了一个内部票证来更新文档,以反映这一点,避免混淆。
因此,使用MongoDB
5.0
和更高版本,您现在可以从capped集合中删除文档。