Ich baue eine Reservierung Website für ein Restaurant mit Flasche Rahmen und Mongoengine.Mongoengine Referenzfeld Abfrage
Meine Hauptaufgabe ist es, alle Reservierungsobjekte gleich gewünschte Kundennummer mit json
data = rzv.objects(restaurant=rest, customer=cdb.objects.get(id=request.args.get("customer-reservation"))).all()
Wenn ich diese Abfrage json gibt mir einen Fehler auszulösen versuchen, der den Kunden-IDs zu holen:
mongoengine.errors.InvalidQueryError
Mein Reservation Modell unten:
class Reservations(document.Document):
restaurant = fields.ReferenceField(Restaurant)
customer = fields.ReferenceField(Customers)
shift_type = fields.EmbeddedDocumentField(Shifts)
room = fields.ReferenceField(Rooms)
time = fields.StringField()
covers = fields.IntField()
status = fields.StringField(default="wait")
desk = fields.EmbeddedDocumentField(Desks)
date = fields.DateTimeField()
sit_date = fields.DateTimeField()
end_sit_date = fields.DateTimeField()
cancel_date = fields.DateTimeField()
Meine Kunden Modell unter:
class Customers(document.Document):
title = fields.StringField()
full_name = fields.StringField()
first_name = fields.StringField()
last_name = fields.StringField()
telephone = fields.StringField()
visits = fields.StringField()
Json:
$.getJSON("?customer-reservation=" + $(this).attr("data-id"), function (data) {
console.log(data);
reservationFill(data);
});
Und schließlich die Ansicht:
if request.args.get("customer-reservation"):
data = rzv.objects(restaurant=rest, customer=cdb.objects.get(id=request.args.get("customer-reservation"))).all()
return data
Was ist der richtige Weg, diese Situation zu fragen. Muss ich einen Filter verwenden?
dies eine Performance-Engpass wird? Das sieht so aus, als müssten wir alle Felder des Kunden abfragen (und dann zurückgeben) und dann alle Datenfelder abfragen (und zurückgeben). – benjaminz
Seine mehrere Aufrufe an die Datenbank und Sie sollten immer die Menge der übertragenen Daten minimieren, indem Sie nur die Felder projizieren, die Sie benötigen. Sie können auch die zurückgegebenen Daten begrenzen, um die Kosten über das Netzwerk weiter zu senken. Es hängt von Ihrer Geschäftslogik und Ihren Anforderungen ab. Als Flaschenhals - das kommt auf den ganzen Stapel an – Ross