MongoDb限制了子集合

时间:2011-07-01 16:00:46

标签: mongodb

是否可以创建上限子集合。我正在尝试做类似的事情:

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)作为一个原子操作的能力。

4 个答案:

答案 0 :(得分:2)

从版本2.4开始,有一个功能允许这样做,称为“上限数组”。这样,您就可以将$push个文档与$each$slice$sort运算符一起添加到数组中,以便在保持给定大小的同时将一个或多个文档添加到数组中,并按指定的子文档字段。

查看确切的语法和示例here

答案 1 :(得分:0)

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

答案 2 :(得分:0)

也许你可以为每个用户创建一个单独的上限集合?因此集合的名称是每个用户的名称。如果你有很多收藏品,我不知道MongoDB是否会变慢?你有多少不同的用户?有点像100,1000,10000 ......?

答案 3 :(得分:0)

他们的JIRA董事会要求将近2年才能做到这一点。它计划从1.6开始被添加到下一版本的mongodb中,所以我不会屏住呼吸。

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