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。这是一种出色的索引方法。非常感谢你。