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的答案