Как изменить первичный ключ в документе rethinkdb?

Основываясь на документах RethinkDB replace(), я пытаюсь изменить первичный ключ документ. В этом случае первичный ключ — email:

var renamePerson = function(originalEmail, newEmail, cb){
    rethink.db(DATABASE).table(TABLE).get(originalEmail).replace({email: newEmail}).run(dbConnection, cb)
}

Это должно работать, но unchanged равно 1, и поиск нового документа, похоже, не дает никаких результатов.

Как изменить первичный ключ документа?


person mikemaccana    schedule 16.09.2016    source источник


Ответы (1)


Проведя небольшое исследование, я нашел эту цитату разработчиков:

«Мы не позволяем людям менять pkeys, вместо этого они должны удалить и заново вставить документ».

Исходя из этого:

var renamePerson = function(originalEmail, newEmail, cb){
    runningDatabase.getPersonByEmail(originalEmail, function(err, person){
        if ( err ) {
            log('Error finding person to rename', err)
            cb(err)
            return
        }
        person.email = newEmail;
        createPersonRaw(person, function(err, createdPerson){
            if ( err ) {
                log('>>> Err creating new document for renamed person', err)
                cb(err)
                return
            }
            deletePerson(originalEmail, cb)
        })
    })
}

(createPersonRaw — это просто вспомогательная функция, которая вставляет документ, а deletePerson помечает человека как удаленного)

person mikemaccana    schedule 16.09.2016