我正在使用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
,以便提高性能?
答案 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");