如何从mongo数组结构化记录中获取多个元素匹配的元素

时间:2013-10-03 10:20:47

标签: mongodb

我使用的是mongodb 2.4.6版本。 我在我的一个名为“mycollection”的集合中有以下记录

{
        "_id" : ObjectId("524d3eb224bfcc31614ec8ef"),
        "symbol" : "JACK",
        "option_exp" : [
                {
                        "dateexpiration" : "2014-03-22",
                        "total_strikes" : 18,
                        "options" : [
                                {
                                        "pricevalue" : "22.5",
                                        "premium" : "100"
                                },
                                {
                                        "pricevalue" : "60.0",
                                        "premium" : "100"
                                }
                        ]
                },
                {
                        "dateexpiration" : "2014-03-22",
                        "total_strikes" : 30,
                        "options" : [
                                {
                                        "pricevalue" : "122.5",
                                        "premium" : "34"
                                },
                                {
                                        "pricevalue" : "60.0",
                                        "premium" : "100"
                                }
                        ]
                },
                {
                        "dateexpiration" : "2013-12-21",
                        "total_strikes" : 16,
                        "options" : [
                                {
                                        "pricevalue" : "20.0",
                                        "premium" : "100"
                                },
                                {
                                        "pricevalue" : "22.5",
                                        "premium" : "100"
                                }
                        ]
                }
        ]
}

我想要检索到特定日期发布日期的所有记录。

我尝试了下面的方法,但它整个文档的结构都在退缩。

db.mycollection.find({ "symbol" : "JACK" ,"option_exp.dateexpiration" : "2014-03-22"}).pretty()

下面给出了错误SyntaxError:Unexpected token。

db.mycollection.find({ "symbol" : "JACK" ,"option_exp.dateexpiration" : "2014-03-22"},{option_exp.$:1}).pretty()

2 个答案:

答案 0 :(得分:1)

尝试聚合功能,如下所示:

db.mycollection.aggregate([
    {$unwind: '$option_exp'}, 
    {$match: {'symbol': 'JACK', 'option_exp.dateexpiration':'2014-03-22'}}
])

答案 1 :(得分:0)

尝试使用$elemMatch

db.collection.find({ option_exp: { $elemMatch: { dateexpiration: "2014-03-22" } } });