Как использовать $ gt и $ lt во встроенном списке в mongodb - PullRequest
2 голосов
/ 14 сентября 2011

Я использую пимонго и в настоящее время имею одну коллекцию. Коллекция содержит документы, представляющие матчи в футбольной лиге. У каждого матча есть цели. В настоящее время цели реализованы в виде списка, содержащегося в объекте сопоставления:

{'matchID':1000,
  'goals':[{'goalID':200,'scorer':'A'},
           {'goalID':201,'scorer':'B']}
          ]
}
{'matchID':1001,
  'goals':[{'goalID':211,'scorer':'C'},
           {'goalID':212,'scorer':'D']}
          ]
}

Что я хочу сделать, так это запросить все цели с идентификатором выше, чем, скажем, 201. Из приведенных выше данных можно ожидать, что я получу цели 211 и 212.

Как мне реализовать это в mongodb - я пытаюсь что-то вроде:

x = mycollection.find({'$gt':[{'match.goals.goalID':201}]})

но это никуда меня не приведет. Должен ли я разделять цели в отдельную коллекцию и вместо этого вручную ссылаться? Как только цель введена, она никогда не будет затронута снова - она ​​будет доступна только для чтения.

1 Ответ

2 голосов
/ 14 сентября 2011

У вас есть несколько проблем с этим запросом:

  1. Правильное пунктирное имя поля для элементов goalID объектов, вложенных в массивы, должно быть "goals.goalID", то есть удалить предшествующее "match."
  2. Правильный порядок для $gt (и друзей: $gte, $lt, $lte) равен field: {$operator: value}, например:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...