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

时间:2013-08-21 12:31:50

标签: mongodb

我的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");

任何人都可以帮助我如何访问特定日期的数据。

1 个答案:

答案 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个项目。)