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