如何更改rethinkdb文档中的主键?

时间:2016-09-16 09:48:07

标签: primary-key rethinkdb

基于the RethinkDB replace() docs我正在尝试更改文档的主键。在这种情况下,主键是email

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

这应该有效,但unchanged1,查找新文档似乎没有返回任何结果。

如何更改文档的主键?

1 个答案:

答案 0 :(得分:0)

做了一些研究,我找到了this quote from the developers

  

'我们不允许人们更改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只是一个插入doc的帮助函数,deletePerson将一个人标记为被删除)