是否可以创建一个有上限的子集合。我试着做这样的事情:
user = {
name: String,
latest_messages: [String]
}其中latest_messages的上限为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:
有一个打开吉拉票,“服务器-1050”请求将两者(push & pop)添加为一个原子操作。
发布于 2011-07-01 16:09:49
您只能指定有上限的集合的文档总数。除非通过应用程序中的一些检查,否则无法限制数组的大小。
发布于 2013-09-01 17:01:52
在2.4版中,有一个特性允许这样做,称为“有上限的数组”。这使您可以将$push文档与$each、$slice和$sort运算符一起添加到数组中,从而向数组中添加一个或多个文档,同时保持给定的大小,并按指定的子文档字段排序。
请参阅确切的语法和示例这里。
发布于 2011-07-01 17:58:12
也许您可以为每个用户创建一个单独的上限集合?因此,集合的名称是每个用户的名称。我不知道如果您有很多集合,MongoDB是否会变慢?您有多少不同的用户?大概是100,1000,10000.?
https://stackoverflow.com/questions/6550346
复制相似问题