Angularjs Angular/Firebase:如何在值更改时删除数据库索引项

Angularjs Angular/Firebase:如何在值更改时删除数据库索引项,angularjs,firebase,Angularjs,Firebase,我有一个应用程序,它可以在保存对象时索引所有属性。例如,当创建新用户时,数据(姓名、电子邮件、角色)会推送到用户表中 类似这样的准结构化: users/ 'uniqueId'/ name:'a user', email:'user@mail.com', role:'admin'** 然后将数据的每个属性推送到索引表中,如下所示: index/ users/ name/ '

我有一个应用程序,它可以在保存对象时索引所有属性。例如,当创建新用户时,数据(姓名、电子邮件、角色)会推送到用户表中

类似这样的准结构化:

users/  
    'uniqueId'/  
        name:'a user',  
        email:'user@mail.com',  
        role:'admin'**  
然后将数据的每个属性推送到索引表中,如下所示:

index/
    users/
        name/
            'a user'/
              'newNameIndexId': 'uniqueId'
        email/
            'user@mail.com'/
                'newEmailIndexId': 'uniqueId'
        role/
            admin/
                'newRoleIndexId': 'uniqueId'
我遇到的问题是,当我更新主用户字段时,会正确创建一个新的索引项,但我不知道如何删除旧的索引项

下面是我正在调用的更新方法:

function update(type, id, changedObject, originalObject){
        var updateRef = dataRef.child(type);
        updateRef = updateRef.child(id);
        var uploadIndexRef = dataRef.child('index/'+type);
        var updateObject = $firebaseObject(updateRef);
        updateObject.$value = changedObject;
        updateObject.$save().then(function(ref) {
            var id = ref.key();
            angular.forEach(changedObject, function(prop, key){
                if(prop && prop.length>2){
                    var cleanProp = prop.toLowerCase().replace(/'+/g, '').replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "-").replace(/^-+|-+$/g, '');
                    uploadIndexRef.child(key+'/'+cleanProp).push(id);
                    if(prop !== originalObject[key]){
                        var removeOldIndex = uploadIndexRef.child(key+'/'+oIndex[key]);
                        var removeObject = $firebaseObject(removeOldIndex);
                        removeObject.$remove();

                    }
                }
            });
        });
    }
任何关于删除旧索引项的好方法的见解都非常有用,值得赞赏。谢谢

当您还没有唯一的键时,调用
推送
(AngularFire
$add
)是非常好的选择。但是对于用户来说,您已经有了唯一的密钥。因此,您通常应该使用它来寻址数据/命名节点

如果添加新节点只是为了替换以前的节点,那么可能是做错了什么

像这样对索引进行建模怎么样

index/
    users/
        name/
            'a user'/
                'uniqueId': true
        email/
            'user@mail.com'/
                'uniqueId': true
        role/
            admin/
                'uniqueId': true
                'uniqueId2': true

使用最后一种方法,您可以根据用户的
唯一ID
进行删除,这样您就不必对具有相同角色/电子邮件/名称的用户进行循环。

+Frank van Puffelen。这是一种出色的索引方法。非常感谢你。