关于删除MongoDB封闭集合中的文档的困惑

qoefvg9y  于 2023-01-08  发布在  Go
关注(0)|答案(1)|浏览(107)

我希望能弄清楚为什么我在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"

正如我所料。看起来这在最近的版本中有所改变?

ljsrvy3e

ljsrvy3e1#

根据MongoDB论坛中的post
我确实在内部复制和缩放了它。我想告诉你,MongoDB〉5. 0取消了apply operations命令中对删除操作的限制。
然而,我们似乎还没有将此添加到文档中。我已经提交了一个内部票证来更新文档,以反映这一点,避免混淆。
因此,使用MongoDB 5.0和更高版本,您现在可以从capped集合中删除文档。

相关问题