Mongodb 如何访问嵌套数组结构集合中的数据
我的MongoDB中有以下结构。 我的集合有一个名为chains的嵌套结构,如下所示。 我正在尝试访问特定日期的选项,如下所示,在我的情况下是2015-01-17Mongodb 如何访问嵌套数组结构集合中的数据,mongodb,Mongodb,我的MongoDB中有以下结构。 我的集合有一个名为chains的嵌套结构,如下所示。 我正在尝试访问特定日期的选项,如下所示,在我的情况下是2015-01-17 db.chains.find({ "symbol" : "UBSC" ,"option_exp.expiration_dt" : "2015-01-17"}).pretty() 但是下面的查询将返回与该符号相关的所有数据 { "_id" : ObjectId("52000a90d293b0e4134e8c35"),
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");
请任何人帮助我了解如何访问特定日期的数据。用于限制结果中包含的选项\u exp
数组字段的内容:
db.chains.find({symbol : "UBSC" ,"option_exp.expiration_dt" : "2015-01-17"},
{option_exp: {$elemMatch: {expiration_dt: "2015-01-17"}}})
这将选择符号等于“UBSC”且
option\u exp
数组项expiration\u dt
等于“2015-01-17”的文档。然后,我们将option\u exp
数组内容限制为具有所需过期日期的项目(否则整个文档将返回所有option\u exp
项目)。嘿,谢谢,我尝试了您提到的此选项,但不幸的是,我遇到以下错误:{“$err”:“不支持的投影选项:$elemMatch”,“code”:13097},我使用的是mongo1.6版本。我看到elemMatch从2.2版开始就得到了支持,所以是否有其他替代方案来实现这一点。在2.2之前,在匹配的文档通过连接后,您必须在代码中执行此操作。@PreethiJain是否有可能在数组中有几个具有相同过期时间的项?如果所有日期都不同,则可以使用运算符$:{“option\u exp.$”:1}
,但它只返回来自array@PreethiJain抱歉,但我不知道在Mongo1.6中还有其他方法可以做到这一点。您可以将模式更改为每个日期只有一个项目(例如,让它包含所有选项)-因此$将起作用,您可以将mongo更新为2.2以使用$elemMatch,或者您可以在内存中进行筛选