如何更新消防仓库数据库中的嵌套字段



我正在创建一个与wooccommerce和Firestore集成的服装电子商务应用程序。

我目前正在尝试构建"添加到愿望列表"部分,在这里我正在努力更新数据库中的项目"收藏夹"字段。

我献上我的Firestore"我的Firestore数据库

我可以访问我的react本地端的项目我需要能够遍历对象,将嵌套的对象项ID与我当前单击的项的想法进行比较,并将收藏夹字段更改为true。目前,我已经尝试过以下操作,但没有成功。

const like = (item) => {
// db.collection("users").doc(user).collection("wishlist").doc(random).set({
//   id:item.id,
//   name:item.name,
// })
db.collection("users")
.doc(user)
.collection("products")
.doc("0")
.get()
.then((data) => {
const info = data.data();
});

};

为了对数组类型字段中存在的对象执行更新,您需要首先找到该特定对象。不幸的是,无法根据数组中包含的对象中存在的值查询Firestore集合。这种过滤不能使用部分数据来实现。要解决这个问题,您必须读取数组,找到需要更新的所需元素,执行更新,然后将文档写回Firestore。

我还写了一篇文章,名为:

  • 如何更新Firestore中的对象数组

所以最后我提出了一个解决方案,我想我会在这里分享:

const like = (item) => {
const newData = { ...Data };
if (newData !== null) {
let index = newData.Products.findIndex((e) => {
return e.id === item.id;
});
console.log(index);
newData.Products[index].favourite = true;
db.collection("users")
.doc(userID)
.collection("products")
.doc("0")
.set(newData)
.then((data) => setData(data))
.catch((error) => console.log(error));
} else {
alert("An error has occured");
}
};

因此,这会获取数据,保存它,添加特定的更改并再次设置

最新更新