如何修改mongodb查询以适应集合结构

时间:2013-07-27 20:37:36

标签: java 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"

                                }
              ]
                     }


                }
        ]
}

现在我正在使用以下查询从我的集合中提取数据

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

正在形成的查询是

{ "finalsymbol" : "UBSC"}

是否可以在查询中包含expiration_dt以及finalsymbol,以便提高性能?

2 个答案:

答案 0 :(得分:1)

如果您需要按到期日期进行搜索,只需再次向调用put的查询中添加另一个字段(不是append吗?)。 如果您需要演奏,请在您用于查询集合的字段上定义索引。

答案 1 :(得分:1)

是的,你只需要添加一个复合索引,并修改你的查询:

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

修改您的Java代码,如下所示:

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