我正在学习Flutter,我试图创建一个页面来添加产品,它在我输入数据后工作,它成功地将其添加到数据库。
CollectionReference addStock = firebaseInstance.collection('users').doc(user?.uid).collection("productstock");
addStock.doc().set({
'productname': productName,
'productcategory': productCategory,
'productcode': produtcCode,
'stockamount': amount
});
但我想做的是,如果productname
,productcategory
,和productcode
已经存在于数据库中,我不想创建一个新的文档ID,而只是更新股票。否则,如果productname
,productcode
和productcategory
不在数据库中,我想创建一个新的id。如何让函数正常工作?
我试过创建一个这样的函数,它成功地更新了股票,但也添加了一个新的文档id与相同的产品或重复的产品,从而创建了许多相同的产品显示。
FirebaseFirestore.instance
.collection("users")
.doc(user!.uid)
.collection("productstoc")
.where("productname", isEqualTo: productName)
.where("productcategory", isEqualTo: productCategory)
.where("productcode", isEqualTo: produtcCode)
.get()
.then((QuerySnapshot querySnapshot) {
for (var doc in querySnapshot.docs) {
if (productName == doc["productname"] && productCategory == doc["productcategory"] && produtcCode == doc["productcode"]) {
CollectionReference updateStock = firebaseInstance.collection('users').doc(user?.uid).collection("productstock");
updateStock.doc().update({
'stockamount': amount + doc["stockamount"]
});
} else {
CollectionReference addStock = firebaseInstance.collection('users').doc(user?.uid).collection("productstock");
addStock.doc().set({
'productname': productName,
'productcategory': productCategory,
'productcode': produtcCode,
'stockamount': amount
});
}
}
});
1条答案
按热度按时间yhxst69z1#
Firebase将数据存储在一个
Map<String, dynamic>
结构中,这是一个key-unique,它会检查你传递的doc
,如果已经有数据与你传递的keys匹配,它会修改它,否则它会创建新的。我想这就是你要问的。