2012-03-05 78 views
2

我有一個名爲devicesegments的表,其中每行包含一個名爲devices的大型數組。由於設備陣列的大小,我被要求不要在我的查詢中包含一個列出所有devicesegment s的頁面,但只包括它們的數量。這可能嗎?
什麼以前我一直做: 一個簡單的db.devicesegments.find()MongoDB - 排除內部數組,但包括它的數量

我現在正在做什麼: db.devicesegments.find({}, { devices : 0 })

我想實現: db.devicesegments.find({}, { devices : 0, devices.length : 1 })

就像一個COUNT(devices) AS device_count

回答

0

阿什凱,目前沒有辦法與Mongo做到這一點。正如@rompetroll所說,您的應用程序應該在每個文檔上保留一個「count」字段,並且每當您更改數組中的條目數時,都會小心地增加$ count。然後,當你查詢的文檔,排除像數組:

db.collection.find({}, {devices:0}) 

如果你願意執行MongoDB 2.1,這是一個開發版本,聚合框架提供了一個查詢中計算數組大小的手段:

http://www.mongodb.org/display/DOCS/Aggregation+Framework

0

由於沒有辦法目前做到這一點,在不包括在我的表一個新device_count,我申請了臨時的解決辦法是從數據庫中獲取的所有數據,與devices陣列沿,併爲每一行添加一個字段devices.length,然後在發送數據之前刪除devices陣列。