Ich möchte einen Entitätsschlüssel erhalten, der die Entitäts-ID und einen Vorgänger kennt. Die ID ist in der vom Vorgänger definierten Entitätsgruppe eindeutig. Es scheint mir, dass es nicht möglich ist, ndb-Schnittstelle zu verwenden. Wie ich Datenspeicher verstehe, kann es durch die Tatsache verursacht werden, dass diese Operation eine vollständige Indexsuche erfordert. Die von mir verwendete Problemumgehung besteht darin, eine berechnete Eigenschaft im Modell zu erstellen, die den ID-Teil des Schlüssels enthält. Ich bin jetzt in der Lage einen Vorfahren Abfrage zu tun und den Schlüsselnbb Entitätsschlüssel nach ID ohne Eltern abrufen
class SomeModel(ndb.Model):
ID = ndb.ComputedProperty(lambda self: self.key.id())
@classmethod
def id_to_key(cls, identifier, ancestor):
return cls.query(cls.ID == identifier,
ancestor = ancestor.key).get(keys_only = True)
Es scheint zu arbeiten, aber gibt es bessere Lösungen für dieses Problem?
Aktualisieren Es scheint, dass für Datenspeicher die natürliche Lösung ist, vollständige Pfade anstelle von Bezeichnern zu verwenden. Anfangs dachte ich, es wäre zu beschwerlich. Nach dem Lesen von dragonx antwort habe ich meine Bewerbung neu gestaltet. Zu meiner Überraschung sieht alles jetzt viel einfacher aus. Zusätzliche Vorteile sind, dass meine Entitäten weniger Speicherplatz benötigen und ich keine zusätzlichen Indizes benötige.
Klingt wie Sie die richtige Antwort bekommen! –
ID ist _nicht_ garantiert innerhalb einer Entitätsgruppe eindeutig - nur für eine bestimmte übergeordnete Entität. –