MongoDb 有大小限制的子集合

3

是否有可能创建一个带容量限制的子集合?我正在尝试类似以下操作:

user = {
  name: String,
  latest_messages: [String]
}

最新消息的数量被限制在10个。

如果不行,你有什么替代建议吗?

更新1:

看起来手动限制数组大小是唯一的解决方案。以下是一种方法:

joe = {name: 'Joe', latest_messages: ['', '', '', '', '', '', '', '', '', '']}
db.users.save(joe)

db.users.update({name: 'Joe'}, {$push: {'latest_messages': 'hello'}})
db.users.update({name: 'Joe'}, {$pop: {'latest_messages': -1}})

db.users.update({name: 'Joe'}, {$push: {'latest_messages': 'world'}})
db.users.update({name: 'Joe'}, {$pop: {'latest_messages': -1}})

有没有关于如何使这更高效的建议?

更新2:

有一个开放的Jira工单,"SERVER-1050"请求添加能够将两个操作(推送和弹出)作为一个原子操作执行的功能。

4个回答

2
从2.4版本开始,有一个名为"capped arrays"的功能可以实现此功能。这允许您结合使用$each$slice$sort操作符将文档$push到数组中,同时保持给定大小,按子文档的指定字段进行排序,从而向数组添加一个或多个文档。
在此处可以查看确切的语法和示例

0
也许你可以为每个用户创建一个单独的有上限的集合?所以集合的名称就是每个用户的名字。我不知道如果你有很多集合,MongoDB会变慢吗?你有多少个不同的用户?大约100个、1000个、10000个之类的数量吗?

说100,000。这感觉像是对集合的非标准使用。是否会有性能影响? - undefined
看起来有一个最大限制:http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections - undefined

0

他们的JIRA面板上有一个请求,已经存在将近2年了,要做的事情正是这个。自从1.6版本以来,它已经计划添加到下一个版本的mongodb中,所以我不会抱太大希望。

https://jira.mongodb.org/browse/SERVER-991


0

您只能指定一个固定集合中文档的总数。 除非通过应用程序中的一些检查,否则无法限制数组的大小。


你有没有看到任何比我上面所写的更高效的方法? - undefined

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