Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 如何访问嵌套数组结构集合中的数据_Mongodb - Fatal编程技术网

Mongodb 如何访问嵌套数组结构集合中的数据

Mongodb 如何访问嵌套数组结构集合中的数据,mongodb,Mongodb,我的MongoDB中有以下结构。 我的集合有一个名为chains的嵌套结构,如下所示。 我正在尝试访问特定日期的选项,如下所示,在我的情况下是2015-01-17 db.chains.find({ "symbol" : "UBSC" ,"option_exp.expiration_dt" : "2015-01-17"}).pretty() 但是下面的查询将返回与该符号相关的所有数据 { "_id" : ObjectId("52000a90d293b0e4134e8c35"),

我的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");
请任何人帮助我了解如何访问特定日期的数据。

用于限制结果中包含的
选项\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,或者您可以在内存中进行筛选