Pymongo, запрос в поле списка и/или

У меня есть коллекция с некоторыми документами вроде:

{
    _id: 5,
    vals: [100, 1100, 1500]
},
{
    _id: 10,
    vals: [1100, 1700]
}

Как я могу запросить документы, которые имеют в поле vals:

  • 1100
  • 1700 ИЛИ 100
  • 100 И 1100

Я могу использовать магию понимания, например:

g = lambda codes: (
    d for d in collection.find() if any(code in d["vals"] for code in codes)
)
g([100, 1700]).next()

Или, для AND:

g = lambda codes: (
    d for d in collection.find() if all(code in d["vals"] for code in codes)
)
g([100, 1100]).next()

Это кажется немного неуклюжим, хотя, если есть некоторая магия поиска, которую можно сделать с драйвером.

Ответ 1

yourmongocoll.find({"vals":1100})
yourmongocoll.find({"$or":[ {"vals":1700}, {"vals":100}]})
yourmongocoll.find({"$and":[ {"vals":100}, {"vals":1100}]})

Я бы порекомендовал читать Расширенные запросы Mongodb

вы также найдете ... полезно