我打算制作一个有两个标签的Android应用。第一个标签显示所有优惠,用户可以喜欢任何优惠。第二个选项卡显示用户喜欢的优惠。我想当用户第一次打开应用程序时,他可以在不登录的情况下看到所有优惠。
优惠券集合包含以下字段:
offers { --collection
offerid{ --document
{
name
desc
img
}
}
}
用户集合包含以下字段:
users { --collection
userid{ --document
{
firstname
lastname
desc
img
phoneNumber
}
}
}
我的问题是如何在商品和用户节点之间建立关系?
我尝试为用户集合设置一个名为likesoffers的子集合,我在文档中存储商品的相同信息。
users { --collection
userid{
{
firstname
lastname
desc
img
phoneNumber
{likedoffers --collection
{
firstname
lastname
desc
img
phoneNumber
}
}
}
}
}
但我想避免重复的信息。你能帮帮我什么吗?
答案 0 :(得分:0)
将您的Json格式更改为
"offers" : {
"81d19e85-8c6c-4824-9fb1-61a7cd316e32" : {
"offerName" : "offer",
"offerId" : "81d19e85-8c6c-4824-9fb1-61a7cd316e32",
},
"e2ec0556-4420-4d2f-b346-0b5cebeb1ebe" : {
"offerName" : "offer",
"offerId" : "e2ec0556-4420-4d2f-b346-0b5cebeb1ebe",
}
然后保存获取商品ID并存储在收藏商品节点中。!
创建节点收藏夹优惠,然后添加
等查询String id = offer.getOfferId(); //offer id
mdatabaseref.child("favorite offers ").child(mAuth.getCurrentUser().getUid()).child(id).setValue(offer)
并使用其用户ID获得每个用户的最爱优惠。
并避免重复保存
希望这对你有帮助。!答案 1 :(得分:0)
为了达到这个目的,我重申你有一个Cloud Firestore数据库结构,它应该是这样的:
Firestore-root
|
--- users (collection)
| |
| --- userId1 (document)
| |
| --- //user details
|
--- offers (collection)
|
--- userId1 (document)
|
--- userOffers (collection)
|
--- offerId1 (document)
|
--- isFavorite: true
|
--- //offer details
要获取属于单个用户的所有商品,只需查询您的数据库以获取userOffers
集合中的所有商品(文档)。要仅获取收藏的优惠,请使用userOffers
查询您的数据库以获取.whereEqualTo("isFavorite", true)
集合中的所有优惠(文档)。对于第一种情况,您只需要使用CollectionReference
,如下所示:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference offersRef = rootRef
.collection("offers")
.document(userId1)
.collection("userOffers");
然后循环浏览userOffers
集合以获取所有优惠文件,无论是否是最喜欢的。
对于第二种情况,您需要使用query
,如下所示:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference offersRef = rootRef
.collection("offers")
.document(userId1)
.collection("userOffers");
Query query = offersRef.whereEqualTo("isFavorite", true);
你需要做同样的事情,但这只会得到最喜欢的优惠。
我没有在此数据库结构中包含详细信息,如firstname,lastname和其他此类详细信息,因此您可以专注于集合和文档之间的关系。
根据您的上一条评论,您的数据库结构应如下所示:
Firestore-root
|
--- users (collection)
| |
| --- userId1 (document)
| |
| --- //user details
|
--- offers (collection)
|
--- offerId1 (document)
|
--- isFavorite: true
|
--- users
| |
| --- userId1: true
| |
| --- userId2: true
|
--- //offer details
查询未经身份验证的用户的所有优惠:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference offersRef = rootRef.collection("offers");
对于第二种情况,这是查询:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference offersRef = rootRef.collection("offers");
Query query = offersRef.whereEqualTo("users." + userId1, true).whereEqualTo("isFavorite", true);
在这种情况下,不要忘记添加将出现在logcat中的索引。