我的MongoDB中有以下结构。 我有一个名为chains的集合的嵌套结构,如下所示。 我正在尝试访问特定日期的选项,如下所示,在我的情况下是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");
任何人都可以帮助我如何访问特定日期的数据。
答案 0 :(得分:3)
使用$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
个项目。)