2013-07-27 52 views
0

我正在使用MongoDB並具有以下格式的集合。我如何修改MongoDB查詢以適應集合結構

db.options.find({ "undersymbol" : "UBSC"}).pretty() 
{ 

     "finalsymbol" : "UBSC", 
     "option_exp" : [ 
       { 
         "expiration_dt" : "2015-01-17", 
         "days_to_expire" : 638, 
         "low_strike" : 120, 
         "high_strike" : 190, 
         "no_of_strikes" : 86, 
         "options" : [ 
           { 
             "strikeprice" : "120.0", 
             "chain_type" : "call", 
             "symbol" : "UBSC" 

           } 
       ] 
        }, 

      "expiration_dt" : "2015-01-18", 
         "days_to_expire" : 656, 
         "low_strike" : 34, 
         "high_strike" : 455, 
         "no_of_strikes" : 67, 
         "options" : [ 
           { 
             "strikeprice" : "420.0", 
             "chain_type" : "call", 
             "symbol" : "UBSC" 

           } 
       ] 
        } 


       } 
     ] 
} 

現在我使用的folllowing查詢從我的收藏中提取數據

  BasicDBObject query = new BasicDBObject(); 
     query.put("finalsymbol", "UBSC"); 
     OptionsData ocd = (OptionsData) coll.findOne(query); 

正在形成的查詢是

{ "finalsymbol" : "UBSC"} 

是否有可能,可我在查詢中還包括expiration_dt還有finalsymbol,這樣性能會提高?

回答

1

是的,你只需要添加一個複合索引,並修改查詢:

db.options.ensureIndex({finalsymbol:1,expiration_dt:1}); 

修改Java代碼如下:

BasicDBObject query= new BasicDBObject("finalsymbol", "UBSC") 
           .append("expiration_dt":"2015-01-18"); 
1

如果您需要按失效日期搜索,只需再次向查詢調用put(是不是append?)添加另一個字段。 如果您需要表演,請在您用於查詢集合的字段上定義一個索引。