2013-08-21 44 views
1

我在MongoDB中具有以下結構。 我有一個名爲鏈的集合的嵌套結構,如下所示。 我試圖訪問特定日期的選項,如下所示,在我的情況下是2015-01-17。如何訪問嵌套數組結構化集合中的數據

db.chains.find({ "symbol" : "UBSC" ,"option_exp.expiration_dt" : "2015-01-17"}).pretty() 

但是,上面的查詢將所有與該符號相關的數據返回給我。

{ 
     "_id" : ObjectId("52000a90d293b0e4134e8c35"), 
     "symbol" : "UBSC", 
     "option_exp" : [ 
       { 
         "expiration_dt" : "2015-01-17", 
          "options" : [ 
           { 
             "mult" : "10" 
           }, 
           { 
             "mult" : "10" 
           } 
         ] 
        }, 
         { 
         "expiration_dt" : "2014-01-18", 
         "options" : [ 
           { 

             "prem_mult" : "10" 
           }, 
           { 
             "prem_mult" : "10" 
           } 

      } 
         ] 
       } 
     ], 
} 

這是我試圖通過Java

BasicDBObject query = new BasicDBObject(); 
query.append("symbol", "UBSC"); 
query.append("option_exp.expiration_dt", "2015-01-17"); 

訪問有誰請幫助我如何訪問一個特定日期的數據的方式。

回答

2

使用$elemMatch以限制包括在結果option_exp數組字段的內容:

db.chains.find({symbol : "UBSC" ,"option_exp.expiration_dt" : "2015-01-17"}, 
       {option_exp: {$elemMatch: {expiration_dt: "2015-01-17"}}}) 

這將選擇具有符號等於「UBSC」和option_exp數組項與expiration_dt等於「2015-01文件-17" 。然後我們將option_exp數組內容限制爲具有所需過期日期的項目(否則整個文檔將全部返回option_exp項目)。

+0

嘿謝謝我試過這個選項你提到,但不幸的是我得到這個下面的錯誤錯誤:{「$ err」:「不支持的投影選項:$ elemMatch」,「代碼」:13097},我用mongo1.6版本 – Pawan

+0

我看到elemMatch從版本2.2開始已經獲得suppourt,所以還有其他替代方案來實現這一點。 – Pawan

+1

在2.2之前,您必須在您的代碼中完成匹配的文檔到達線路之後。 – Ross