最近,我将数据模型从Firebase移动到了Firestore.我所有的代码都正常工作,但在检索某些数据的嵌套查询方面,我遇到了一些麻烦.重点是:
现在,我的此部件的数据模型如下所示(是!另一个关注者/订阅源示例):
{
"Users": { //Collection
"UserId1" : { //Document
"Feed" : { //Subcollection of Id of posts from users this user Follow
"PostId1" : { //Document
"timeStamp" : "SomeDate"
},
"PostId2" : {
"timeStamp" : "SomeDate"
},
"PostId3" : {
"timeStamp" : "SomeDate"
}
}
//Some data
}
},
"Posts":{ //Collection
"PostId1":{ //Document
"Comments" :{ //Subcollection
"commentId" : { //Document
"authorId": "UserId1"
//comentsData
}
},
"Likes" : { //Subcollection
"UserId1" : { //Document
"liked" : true
}
}
}
}
}
我的问题是,为了检索用户提要的帖子,我应该用下一种方式进行查询:
- 从我的订阅源获取按时间戳排序的最后X个文档
feedCol(userId).orderBy(CREATION_DATE, Query.Direction.DESCENDING).limit(limit)
个
之后,我应该对从列表中检索到的每个帖子执行一次查询:
workoutPostCol.document(postId)
现在我有了每篇帖子的数据,但我想拍下用户名、图片和点数..等作者,这是在一个不同的
Document
,所以,再次,我应该做另一个单一的查询,每authorId
检索到的帖子列表userSocial(userId).document(toId)
最后,同样重要的是,我需要知道我的当前用户是否已经喜欢该帖子,因此我需要(再次)对每个帖子执行一次查询,并判断我的userid是否在
posts/likes/{userId}
以内
现在一切正常,但考虑到Firestore
的价格取决于数据库调用的数量,而且这并没有使我的查询变得更简单,我不知道是我的数据模型不适合这种数据库,我应该转到正常的SQL
还是再回到Firebase
.
Note:我知道,将喜欢、提要等子集合移动到我的用户或post文档中的ArrayList中,一切都会容易得多,但文档的限制是1MB,如果增长太多,它将在future 崩溃.另一方面,Firestore
不允许子文档查询(但)或使用多个whereEqualTo
的OR
子句.
我读过很多用户的帖子,他们在寻找一种简单的方法来存储这种ID's
关系时遇到了问题,在他们的Collections
,Use Arraylists
中使用joins
和queries
会很棒,但1MB的限制限制了它的数量.
希望有人能澄清这一点,或者至少教我一些新的东西;也许我的模型只是垃圾,有一个简单易行的方法吗?或者我的模型不适用于非sql数据库.