2011-07-01 48 views
2

是否可以創建上限子集合。我試着這樣做: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"請求加做兩個(推&流行音樂)作爲一個原子操作的能力。

+0

看到@阿霞,甘維珍的答案 –

回答

0

您只能指定加蓋集合的文檔總數。 除非通過應用中的某些檢查,否則沒有辦法限制數組的大小。

+0

你看到使它比上面我所更有效的方法嗎? –

+1

http://docs.mongodb.org/manual/reference/operator/slice/#op._S_slice – Tobias

0

也許你可以爲每個用戶創建一個單獨的封頂集合?所以集合的名稱是每個用戶的名稱。我不知道MongoDB是否變得很慢,如果你有很多集合?你有多少個不同的用戶?像100,1000,10000 ...?

+0

說100,000。這感覺就像一個非標準的集合用法。是否有任何性能影響? –

+0

看起來有一個最大值:http://www.mongodb.org/display/DOCS/Using+a+Large+Number+of+Collections – TTT

0

在他們的JIRA董事會上有一個近2年的要求來做這件事。它已經計劃從1.6版開始添加到下一個版本的mongodb中,所以我不會屏住呼吸。

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

2

隨着2.4版本還有一個功能,讓這樣所謂的「封端陣列」。這允許您$push文檔結合的陣列與$each$slice$sort運營商的一個或多個文件添加到陣列中,同時保持給定的尺寸,由子文檔的指定字段排序。

查看確切的語法和示例here