如何在MongoDB中对嵌套列表使用$gt和$lt

2 投票
1 回答
1461 浏览
提问于 2025-04-17 02:17

我正在使用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

你在这个查询上有几个问题:

  1. 对于数组中嵌套对象的 goalID 元素,正确的字段名称应该是 "goals.goalID",也就是说,要去掉前面的 "match."。
  2. 使用 $gt(还有其他类似的:$gte$lt$lte)时,正确的格式是 字段: {$操作符: 值},比如:

    db.mycollection.find({"goals.goalID": {"$gt": 201}})

撰写回答