2015-02-05 91 views
1
{ 
    "_id": newDate("2/5/2015 15:00:18"), 
    "bidPrices": [ 
    13.78, 
    13.77, 
    13.76, 
    13.75, 
    13.74, 
    13.73, 
    13.72, 
    13.71, 
    13.7, 
    13.69 
    ], 
    "askPrices": [ 
    13.79, 
    13.8, 
    13.81, 
    13.82, 
    13.83, 
    13.84, 
    13.85, 
    13.86, 
    13.87, 
    13.88 
    ] 
} 

我想從bidPrices中獲得哪些索引是「1,3,5,6」的價格。 我只知道使用$ slice,mongo會返回bidPrices的子數組。 有沒有什麼辦法讓蒙戈回報這樣的數組:如何在MongoDb中按特定索引獲取元素

[0, 13.77, 0, 13.75, 0, 13.73, 13.72, 0, 0, 0] 

謝謝!

+0

爲什麼你想回到這個集合的元素?你不能只修剪你的客戶端代碼嗎?如果這是你需要在許多文檔上經常做的事情,那麼你應該重新設計你的模式來處理它。 (2.6)MongoDB不支持這樣的投影。 – wdberkeley 2015-02-05 18:55:46

回答

0

使用的Map Reduce

var mapFunction = function(){ 
           for (var i in this.bidPrices) { 
            if(i == 1 || i == 3 || i == 5 || i == 6){ 
             emit(this._id, this.bidPrices[i]); 
            } 
           }; 
          }; 

var reduceFunction = function(key, values) { 
          var reduced = {};  
           for (var i in values) { 
             reduced[i] = values[i]; 
           }; 
          return reduced;    
       }; 

db.test2.mapReduce(
        mapFunction, 
        reduceFunction, 
        { out: "test2_res" 
        } 
        ) 
+0

好的,我會試試看。但我擔心效率。有沒有人可以告訴我這件事? – 2015-02-06 03:43:42

+0

它應該是相當有效的在你的情況。 – 2015-02-07 12:08:19