如何在mongodb中的嵌入列表中使用$ gt和$ lt

时间:2011-09-14 13:50:44

标签: python mongodb

我正在使用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 个答案:

答案 0 :(得分:2)

您对该查询有几个问题:

  1. 嵌套在数组中的对象的goalID元素的正确虚线字段名称应为“goals.goalID” - 也就是说,删除前面的“match.
  2. $gt(以及朋友:$gte$lt$lte)的正确顺序为field: {$operator: value},如:

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