如何在Firebase Firestore中使用条件字段路径向嵌套字段添加数据


var k = [
{
"category": "Cars",
"products": [
{
"productName": "Aston Martin",
"quantity": 2,
"costPrice": 13500000,
"coverPhoto": "www.astonmartinphotoUrl.jpg"
},
{
"productName": "Mercedes",
"quantity": 1,
"costPrice": 220000,
"coverPhoto": "www.mercerdezphotoUrl.jpg"
}
]
},
{
"category": "Food",
"products": [
{
"productName": "Pizza",
"quantity": 50,
"costPrice": 30,
"coverPhoto": "www.pizzaphotoUrl.jpg"
},
{
"productName": "Pancake",
"quantity": 3,
"costPrice": 3,
"coverPhoto": "www.pancakephotoUrl.jpg"
}
]
}

);根据上面的代码示例,我尝试向嵌套列表中添加一个新映射product使用firebase.arrayUnion()

Map _map = 
{
"productName": 'Tesla',
"quantity": 2,
"costPrice": 45000,
"coverPhoto": "www.teslaPhotoUrl.jpg"
};

我想只在键'category'添加此映射等于'Cars'

_firebaseFirestoreRef.collection('data').doc(id).update({
"fieldPath to the the list where key category == Cars": FieldValue.arrayUnion([_map]) 

});

我希望最终结果在我的firebase firestore数据库中是这样的

[
{
"category": "Cars",
"products": [
{
"productName": "Aston Martin",
"quantity": 2,
"costPrice": 13500000,
"coverPhoto": "www.astonmartinphotoUrl.jpg"
},
{
"productName": "Mercedes",
"quantity": 1,
"costPrice": 220000,
"coverPhoto": "www.mercerdezphotoUrl.jpg"
},
{
"productName": 'Tesla',
"quantity": 2,
"costPrice": 45000,
"coverPhoto": "www.teslaPhotoUrl.jpg"
}
]
},
{
"category": "Food",
"products": [
{
"productName": "Pizza",
"quantity": 50,
"costPrice": 30,
"coverPhoto": "www.pizzaphotoUrl.jpg"
},
{
"productName": "Pancake",
"quantity": 3,
"costPrice": 3,
"coverPhoto": "www.pancakephotoUrl.jpg"
}
]
}
];

我知道我需要使用firebasefirestorefieldpath和一些查询对象,但我不知道如何有效地使用它来实现这一点…

由于您的k是一个数组,您试图更新数组字段中的现有元素,这在Firestore中是不可能的。您首先需要读取文档,从中获取k数组,在应用程序代码中更新它,然后将结果字段写回数据库。

这在之前已经被经常讨论过了,所以我建议看看关于更新数组中的项的其他一些问题。


您还可以考虑将顶级数组转换为映射,使用类别作为第一级字段名:

products: {
"Cars": [{
"productName": "Aston Martin",
"quantity": 2,
"costPrice": 13500000,
"coverPhoto": "www.astonmartinphotoUrl.jpg"
}, ... ]
"Food": [{
... 
}]
}

现在你可以添加一个项目到Cars数组与products.Cars的数组联合。


正如Dharmaraj评论的那样,您还可以考虑将产品放入子集合中。这将允许您单独查询产品,并允许您在不读取所有产品的情况下读取父文档。

相关内容

  • 没有找到相关文章