1

我的 MongoDB 中有以下结构。我有一个名为chains 的集合的嵌套结构,如下所示。我正在尝试访问特定日期的选项,如下所示,在我的情况下是 2015-01-17。

db.chains.find({ "symbol" : "UBSC" ,"option_exp.expiration_dt" : "2015-01-17"}).pretty()

但是上面的以下查询返回了与该 Symbol 相关的所有数据。

{
        "_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");

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

4

1 回答 1

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”的文档和等于“2015-01-17”的option_exp数组项。expiration_dt然后我们将option_exp数组内容限制为需要过期日期的项目(否则整个文档将option_exp返回所有项目)。

于 2013-08-21T13:16:04.710 回答