热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何使用Ionic4

在MyCloudFirestore中,数据库结构如下所示。现在,我想像这样基于Index0,

在My Cloud Firestore中,数据库结构如下所示。现在,我想像这样基于Index 0Index 1删除索引位置。

const arrayLikedImagesRef = {imageurl: image,isliked: true};
const db = firebase.firestore();
const deleteRef = db.collection('userdata').doc(`${phno}`);
deleteRef.update({
likedimages: firebase.firestore.FieldValue.arrayRemove(arrayLikedImagesRef)
});
});

如何使用Ionic 4


与explained here一样,“尝试在特定索引处更新或删除数组元素时,可能会发生坏事”。这就是Firestore official documentation指示arrayRemove()函数将元素(字符串)作为参数而不是索引的原因。

根据this answer中的建议,如果您更喜欢使用索引,则应该获取整个文档,获取数组,对其进行修改并将其添加回数据库中。

,

您不能使用FieldValue通过索引删除数组项。相反,您可以使用transaction删除数组项。使用事务可确保您实际上在写回所需的确切数组,并且可以与其他编写者打交道。

例如(我在这里使用的参考是任意的,当然,您需要提供正确的参考):

db.runTransaction(t => {
const ref = db.collection('arrayremove').doc('targetdoc');
return t.get(ref).then(doc => {
const arraydata = doc.data().likedimages;
// It is at this point that you need to decide which index
// to remove -- to ensure you get the right item.
const removeThisIndex = 2;
arraydata.splice(removeThisIndex,1);
t.update(ref,{likedimages: arraydata});
});
});

当然,如上面的代码所述,您只能确保在实际位于事务本身内部时将要删除正确的索引-否则,您获取的数组可能不会与您最初选择的索引是。所以要小心!


也就是说,您可能会问FieldValue.arrayRemove不支持嵌套数组(因此您不能将其传递给多个映射来删除),该怎么做。在这种情况下,您只需要上面的变量即可实际检查值(此示例仅适用于单个值和固定的对象类型,但是您可以轻松地对其进行修改以使其更通用):

const db = firebase.firestore();
const imageToRemove = {isliked: true,imageurl: "url1"};
db.runTransaction(t => {
const ref = db.collection('arrayremove').doc('byvaluedoc');
return t.get(ref).then(doc => {
const arraydata = doc.data().likedimages;
const outputArray = []
arraydata.forEach(item => {
if (!(item.isliked == imageToRemove.isliked &&
item.imageurl == imageToRemove.imageurl)) {
outputArray.push(item);
}
});
t.update(ref,{likedimages: outputArray});
});
});

(我确实注意到,在您的代码中您使用的是原始布尔值,但是数据库将isliked项作为字符串。我测试了上面的代码,尽管如此,它仍然可以正常工作,但是最好在使用类型时保持一致。


推荐阅读
author-avatar
cfn7831325
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有