Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
617 views
in Technique[技术] by (71.8m points)

python - mongoengine - Query on ListField of EmbeddedDocumentField

I use mongoengine with Django and python.

This is my code:

class Chambre(EmbeddedDocument):
    max_personne = IntField(default=0)
    prix = IntField(default=0)

class Hotel(Document):
    code = IntField(default=0)
    nom = StringField(max_length=200)
    chambre = ListField(EmbeddedDocumentField(Chambre))
    resume = StringField(max_length=200)

1 - I want a query to filter all Hotel that have at least a Chambre with prix >= a (a floeat number)

2 - also have that Chambre

Any idea?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

You can use the embedded notation as well as the Query Operator for "greater than or equal "

Hotel.objects(chambre__prix__gte=a)

Or if you need to cast as an integer:

Hotel.objects(chambre__prix__gte=int(math.floor(a)))

If you want to only project the "matched" element, use a raw query directly on the driver instead:

Hotel._get_collection().find(
  { 'chambre.prix': { '$gte': int(math.floor(a)) } },
  { 'chambre.$': 1 }
)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...