问题
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?
回答1:
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 }
)
来源:https://stackoverflow.com/questions/44789523/mongoengine-query-on-listfield-of-embeddeddocumentfield