使用MongoDB

时间:2015-12-24 05:18:00

标签: javascript json mongodb documents

我是否尝试使用 Node.js 驱动程序查询一组JSON数据。我已经看过使用点符号的所有帖子,以及所有这些,但我没有得到任何地方。以下是我正在使用的数据的JSON示例。我正在尝试查询 Arsenal 所涉及的所有匹配项。由于我不太确定如何查询team1team2下的名称,我无处可去这件事(如果阿森纳在team1team2),它只会显示文件。我认为team1team2应该是一个数组,这会让事情变得更容易,但这是一个非常大的文件,我无法控制,所以我不想改变它结构

{
    "_id" : ObjectId("56773d88a09bc70f31a900d5"),
    "name" : "English Premier League 2012/13",
    "rounds" : [ 
        {
            "name" : "Matchday 1",
            "matches" : [ 
                {
                    "date" : "2012-08-18",
                    "team1" : {
                        "key" : "arsenal",
                        "name" : "Arsenal",
                        "code" : "ARS"
                    },
                    "team2" : {
                        "key" : "sunderland",
                        "name" : "Sunderland",
                        "code" : "SUN"
                    },
                    "score1" : 0,
                    "score2" : 0
                }, 
                {
                    "date" : "2012-08-18",
                    "team1" : {
                        "key" : "fulham",
                        "name" : "Fulham",
                        "code" : "FUL"
                    },
                    "team2" : {
                        "key" : "norwich",
                        "name" : "Norwich",
                        "code" : "NOR"
                    },
                    "score1" : 5,
                    "score2" : 0
                }
            ]
        }
    ]
}

2 个答案:

答案 0 :(得分:0)

您可以使用$elemMatch查询数组内部:

db.getCollection('test').find({
    rounds: { $elemMatch: {
        $or: [
            { matches: { $elemMatch: { "team1.code": "ARS" } } },
            { matches: { $elemMatch: { "team2.code": "ARS" } } }
        ]
    } }
});

答案 1 :(得分:0)

你可以这样做:

db.sample.aggregate(
    {$match: '...'}
    { $unwind: '$rounds'},
    { $unwind: '$rounds.matches'},
    { $match: {'rounds.matches.team1.name': 'Arsenal'}},
    { $group: '...'}
)