web-dev-qa-db-fra.com

Pymongo, requête sur le champ de liste et / ou

J'ai une collection avec quelques documents comme:

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

Comment puis-je rechercher des documents qui ont, dans le champ vals:

  • 1100
  • 1700 OR 100
  • 100 ET 1100

Je peux utiliser une magie de compréhension comme:

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

Ou, pour le ET:

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

Cela semble un peu maladroit mais s'il y a de la magie qui peut être faite avec le pilote.

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

je recommanderais de lire Mongodb Advanced queries

vous trouverez également $ in ... utile

46
locojay