2012-06-03 67 views
0

中的項目數,我想返回一個嵌入式集合的計數查詢在MongoDB中。查詢返回的MongoDB嵌入式收集

說我有一個名爲型材

var ProfileSchema = new Schema({ 
    uname: { 
    type: String, 
    required: true, 
    index: true, 
    unique: true 
    }, 
    fname: String, 
    lname: String, 
    posts: [ObjectId] 
}); 

我如何可以查詢它讓我選擇UNAME,框架,跛腳,posts.length收藏?我不想通過網絡返回帖子集合,因爲用戶可以擁有數百個帖子。我是否應該在配置文件模式中嵌入帖子ID?也許我應該擺脫它,因爲已經有一個職位定義的另一個集合,所以我基本上是用Profile.posts爲外鍵的嵌入式集合。

+0

可以組由uname和精簡函數的集合,你可以指望的帖子對象。小心,因爲小組受到鑰匙的限制。如果此限制是交易斷路器,則可以使用映射縮減。 – peshkira

+0

嗯你的意思是在一個地圖reduce函數中我可以把reduce函數放入或定期查詢。理想情況下,做db.profiles.find會很好({uname:'mike'},{posts.length:1}) – MonkeyBonkey

+0

不,在組函數中可以有一個reduce函數。下面是一個例子,他們實現計數與組:http://www.mongodb.org/display/DOCS/Aggregation#Aggregation-Group – peshkira

回答

5

見蒙戈文檔$大小運營商here的討論。

簡而言之,您可以查詢基於精確數組大小與大小$操作,但你不能回來數組大小,也不能查詢基於陣列的尺寸範圍。

什麼建議可以很好地適用於你 - 保留另一個字段是帖子的數量 - 可以在查詢中用作過濾器/範圍,當你需要知道數組的大小時可以返回它。無論帖子是存儲在別處還是嵌入到數組中,如果您根據帖子數進行查詢或過濾,則此字段將非常有用。

有一個非常similar question類似的建議。