看起來很簡單的任務,對我來說是一個挑戰。mongodb - 檢索數組子集
我有以下MongoDB的結構:
{
(...)
"services": {
"TCP80": {
"data": [{
"status": 1,
"delay": 3.87,
"ts": 1308056460
},{
"status": 1,
"delay": 2.83,
"ts": 1308058080
},{
"status": 1,
"delay": 5.77,
"ts": 1308060720
}]
}
}}
現在,下面的查詢將返回整個文檔:
{ 'services.TCP80.data.ts':{$gt:1308067020} }
我不知道 - 這可能對我來說,只接收那些「數據」數組條目匹配$ gt條件(種類的收縮文檔)?
我正在考慮MapReduce,但甚至找不到關於如何將外部參數(timestamp)傳遞給Map()函數的單個示例。 (此功能已添加到1.1.4中https://jira.mongodb.org/browse/SERVER-401)
此外,總是有一種替代方法來編寫storedJs函數,但由於我們提到的大量數據,db-locks在這裏是不能容忍的。
最有可能我得的結構重新設計的東西1級深,如:
{
status:1,delay:3.87,ts:138056460,service:TCP80
},{
status:1,delay:2.83,ts:1308058080,service:TCP80
},{
status:1,delay:5.77,ts:1308060720,service:TCP80
}
但DB將急劇增長,因爲「服務」是唯一的,這將追加每個許多選項之一文件。
請指教!
在此先感謝
至於「傳遞參數映射函數」,從你鏈接到的問題:'res = t.mapReduce(m,r,{mapparams:[2,2]});'https:// github。 com/mongodb/mongo/commit/123cd0eb6734f397ebf4236e0779d056243446d4#L1R38 –
感謝Thomas, 至於我的解決方案 - 我目前堅持mongo的GROUP函數,它比mapreduce具有性能優勢,支持外部變量(通過'cond'參數)和允許我做任何類型的子集檢索我喜歡 – FlegmatoidZoid