我正试图向用户展示他参与的项目(例如喜欢的帖子)。现在,我将用户文档(在用户集合中)存储在另一个集合中的 文档的 ID (帖子),当我想在回收站视图中显示它们时,我首先从用户文档中获取ID。然后我通过ID获取所有帖子。有什么解决方法,我可以在后文档的子集合中存储用户ID,然后获取 查询 所有 < / strong>喜欢/评论/由用户发出的帖子如何?因此,用户文档将不会引用帖子的ID,并且在帖子集合中,我可以执行以下操作:
Query ref = from db.collection("posts") get all posts where post.likedBy == user;
我不喜欢将所有喜欢该帖子的用户放入帖子文档中-用户下载所有ID。
posts (collection)
-postID (post document)
-authorID, ... (fields)
users (collections)
-userID (user document)
-string[] idsOfPosts (fields)
答案 0 :(得分:1)
您应该使用Subcollections作为数据模型。
子集合中的文档也可以包含子集合, 允许您进一步嵌套数据。您最多可以嵌套100个数据
您还可以使用collection group query从集合组而不是单个集合中检索文档。该链接为您提供了不同语言的示例代码片段。
编辑:
根据您在评论中提供的用例:
我想说的是您描述数据模型以使用户喜欢的所有帖子的方式,它需要在查询中进行查询。不确定它是否可行或有效。
通过这种方式运行以下查询(我正在使用NodeJ),将为您提供所有user1喜欢的帖子。
let postsRef = db.collection('posts');
const user1 = postsRef.where('Liked', 'array-contains',
'user1');
let query1 = user1.get()
.then(snapshot => {
if (snapshot.empty) {
console.log('No matching documents.');
return;
}
snapshot.forEach(doc => {
console.log(doc.id, '=>', doc.data());
});
})
.catch(err => {
console.log('Error getting documents', err);
});
输出:
编辑:(11/12/2019)
根据您在评论中描述的内容,以下是一个可能解决您的问题的想法:
您可以引用包含用户列表的文档,而不是拥有喜欢该帖子的用户列表。您可以根据需要引用任意数量的文档。
示例:
文档甚至可以位于不同的馆藏中。