如何在MongoDB中对嵌套列表使用$gt和$lt
我正在使用pymongo,目前只有一个集合。这个集合里存放的是足球联赛的比赛记录。每场比赛都有进球。目前,进球是作为一个列表放在比赛对象里的:
{'matchID':1000,
'goals':[{'goalID':200,'scorer':'A'},
{'goalID':201,'scorer':'B']}
]
}
{'matchID':1001,
'goals':[{'goalID':211,'scorer':'C'},
{'goalID':212,'scorer':'D']}
]
}
我想做的是查询所有ID大于201的进球。根据上面的数据,我希望能得到进球211和212。
我该如何在mongodb中实现这个功能呢?我尝试了一些方法,比如:
x = mycollection.find({'$gt':[{'match.goals.goalID':201}]})
但这些方法没有让我得到想要的结果。我是不是应该把进球分成一个单独的集合,然后手动引用呢?因为一旦进球被记录下来,就不会再被修改了,它将是只读的。
1 个回答
2
你在这个查询上有几个问题:
- 对于数组中嵌套对象的
goalID
元素,正确的字段名称应该是 "goals.goalID
",也就是说,要去掉前面的 "match.
"。 使用
$gt
(还有其他类似的:$gte
、$lt
、$lte
)时,正确的格式是字段: {$操作符: 值}
,比如:db.mycollection.find({"goals.goalID": {"$gt": 201}})