是否可以创建上限子集合。我正在尝试做类似的事情:
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:
有一个open Jira ticket, "SERVER-1050"要求添加将两者(push& pop)作为一个原子操作的能力。
答案 0 :(得分:2)
从版本2.4开始,有一个功能允许这样做,称为“上限数组”。这样,您就可以将$push
个文档与$each
,$slice
和$sort
运算符一起添加到数组中,以便在保持给定大小的同时将一个或多个文档添加到数组中,并按指定的子文档字段。
查看确切的语法和示例here。
答案 1 :(得分:0)
您只能指定上限集合的文档总数。 除非通过应用程序中的某些检查,否则无法限制数组的大小。
答案 2 :(得分:0)
也许你可以为每个用户创建一个单独的上限集合?因此集合的名称是每个用户的名称。如果你有很多收藏品,我不知道MongoDB是否会变慢?你有多少不同的用户?有点像100,1000,10000 ......?
答案 3 :(得分:0)
他们的JIRA董事会要求将近2年才能做到这一点。它计划从1.6开始被添加到下一版本的mongodb中,所以我不会屏住呼吸。