Промяна на идентификатор на обект на Google App Engine?

Използвам Google App Engine NDB. Понякога ще искам да вкарам всички потребители с телефонен номер в определен списък. Използването на заявки е изключително скъпо за това, така че реших просто да направя стойността на id на обекта User телефонния номер на потребителя, така че да мога да извличам директно чрез ids.

Проблемът е, че полето за телефонен номер не е задължително, така че първоначално обектът User се създава без телефонен номер и следователно няма стойност за id. Така че ще бъде създадено user = User() за разлика от user = User(id = phone_number).

Така че, когато потребител на по-късен етап реши да добави телефонен номер към акаунта си, има ли все пак да промени стойността на id на този потребителски обект към новия телефонен номер?


person Snowman    schedule 19.10.2012    source източник
comment
Може би не разбирам правилно? Вземете стария идентификатор на обект, изтрийте го и поставете новия идентификатор на обект.   -  person voscausa    schedule 19.10.2012
comment
@voscausa добре, това е едно и също образувание. Идентификационният номер е ключът на обекта. В NDB се нарича id, а не key_name   -  person Snowman    schedule 19.10.2012
comment
NDB Docs: Име на ключ (т.е. идентификатор на низов ключ) за извличане или създаване. Така че, когато е низ, това е име на ключ.   -  person voscausa    schedule 19.10.2012
comment
@voscausa правилно, така че сега възможно ли е да промените това име на ключ, след като обект вече е създаден?   -  person Snowman    schedule 19.10.2012
comment
Да, така мисля. Гуидо не видя причина за допълнителен метод за получаване чрез key_name. Тъй като можете да идентифицирате дали NDB id съдържа идентификатор или име (хранилище за данни).   -  person voscausa    schedule 19.10.2012


Отговори (1)


Идентификационният номер на обекта е част от първичния ключ за обекта, така че няма начин да го промените. Промяната му е идентична със създаването на нов обект с новия ключ и изтриването на стария - което е едно нещо, което можете да направите, ако искате.

По-добро решение би било да се създаде вид PhoneNumber, който предоставя препратка към асоциирания User, което ви позволява да правите търсения с операции за получаване, но не изисква всеки потребител да има точно един телефонен номер.

person Nick Johnson    schedule 25.10.2012
comment
как се прави справка с NDB? - person mFontoura; 30.01.2013