假设我插入以下记录(例如foo1,foo2,foo3,foo4,.... foo10) 我希望这个集合在任何时间点都只保留5条记录(例如它可能是foo1,... foo5或foo2,... foo6或foo6,... foo10)
我该如何实现这个目标?
答案 0 :(得分:5)
听起来你正在寻找capped collection:
上限集合是固定大小的集合...
[...]
一旦空间被充分利用,新添加的对象将替换集合中最旧的对象。
您可以使用类似于
的命令来实现此目的db.createCollection("collectionName",{capped:true,size:10000,max:5})
其中10000是以字节为单位的大小,5是您要在集合中限制的最大文档数。
答案 1 :(得分:1)
使用
的 db.createCollection("集合名" {封端:真,大小:10000,最大:1000})强>
命令,限制可以放在号码上。集合中的记录
答案 2 :(得分:0)
封顶的收藏集听起来不错,但它限制了删除操作。 在具有上限的集合中,您只能插入新元素,并且达到特定大小后,旧元素将自动删除。
但是,如果要按任何顺序插入和删除任何文档并限制集合中文档的最大数量,mongoDB不会提供直接解决方案。
遇到此问题时,我在另一个集合中使用了额外的count变量。 此集合具有一个验证规则,该规则避免计数变量变为负数。 计数变量应始终为非负整数。
“计数”:{ “ $ gte”:0 }
算法很简单。 将计数减一。 如果成功,则插入文档。 如果失败,则意味着没有剩余空间。
反之亦然。
您还可以使用事务来防止失败(计数减少,但在插入操作之前服务失败)。