2012-10-19 1 views
2

J'utilise Google App Engine NDB. Parfois, je vais vouloir obtenir tous les utilisateurs avec un numéro de téléphone dans une liste spécifiée. L'utilisation de requêtes est extrêmement chère pour cela, alors j'ai pensé que je vais juste faire de la valeur d'identifiant de l'entité User le numéro de téléphone de l'utilisateur afin que je puisse aller chercher directement par ids. Le problème est que le champ de numéro de téléphone est facultatif, donc initialement une entité utilisateur est créée sans numéro de téléphone, et donc aucune valeur pour id. Donc, il serait créé user = User() par opposition à user = User(id = phone_number).Modifier un identifiant d'entité Google App Engine?

Ainsi, lorsqu'un utilisateur décide ultérieurement d'ajouter un numéro de téléphone à son compte, y a-t-il moyen de modifier la valeur d'identifiant de cette entité utilisateur au nouveau numéro de téléphone?

+0

Peut-être que je ne comprends pas correctement? Récupère l'ancien identifiant d'entité, supprime-le et mets le nouvel identifiant d'entité. – voscausa

+0

@voscausa bien c'est la même entité. L'identifiant est la clé de l'entité. Dans le NDB, il est appelé id au lieu de key_name – Snowman

+0

NDB Docs: Un nom de clé (c'est-à-dire un ID de clé de chaîne) à récupérer ou à créer. Donc, quand c'est une chaîne, c'est un nom de clé. – voscausa

Répondre

3

L'ID d'entité fait partie de la clé primaire de l'entité, il n'y a donc aucun moyen de le modifier. Le changer est identique à la création d'une nouvelle entité avec la nouvelle clé et à la suppression de l'ancienne - ce que vous pouvez faire, si vous le souhaitez.

Une meilleure solution serait de créer une sorte PhoneNumber qui fournit une référence à l'associé User, vous permettant de faire des recherches avec les opérations get, mais pas exigeant que chaque utilisateur d'avoir exactement un numéro de téléphone.

+1

comment faites-vous référence avec NDB? – mFontoura