MongoDb封顶子集合

MongoDb封顶子集合,mongodb,Mongodb,是否可以创建封顶子集合。我试着做一些类似的事情: user = { name: String, latest_messages: [String] } 其中最新\u消息的上限为10 如果没有,您有什么建议作为替代方案 更新1: 看起来,手动保持阵列上限似乎是唯一的解决方案。以下是一种方法: joe = {name: 'Joe', latest_messages: ['', '', '', '', '', '', '', '', '', '']} db.users.save(joe)

是否可以创建封顶子集合。我试着做一些类似的事情:

user = {
  name: String,
  latest_messages: [String]
}
其中
最新\u消息
的上限为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:


有一个请求将这两个操作(推送和弹出)作为一个原子操作来添加的功能。

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

也许您可以为每个用户创建一个单独的封顶集合?因此,集合的名称是每个用户的名称。我不知道如果你有很多收藏,MongoDB是否会变慢?你有多少不同的用户?大约有100、1000、10000……?

他们的JIRA董事会上有一个将近2年的请求,就是要这样做。它计划从1.6版开始添加到mongodb的下一个版本中,所以我不会屏住呼吸


从2.4版开始,有一个功能允许执行此操作,称为“封顶阵列”。这允许您将
$push
文档与
$each
$slice
$sort
操作符结合使用,将一个或多个文档添加到数组中,同时保持给定的大小,按指定的子文档字段排序


请参阅确切的语法和示例。

100000。这感觉像是对集合的非标准使用。是否存在任何性能影响?似乎存在一个最大值:您认为有什么方法比我上面提到的更有效吗?请参见@asya kamsky的答案