我正计划创建一个关注系统,其中一个用户可以关注多个用户。出于我的目的,我希望一个用户能够关注20-25个用户。
因此,为了创建提要,我打算在帖子中创建一个动态字段,其键是用户创建帖子的用户的uid,如下所示。
{
postText : "random text",
postImage : 'some url',
{userUID} : true
}
此处userUID是用户创建帖子的uid。这样,我就可以创建一个查询:
db.collection('posts')
.where(useruid1, '==', true)
.where(useruid2, '==', true)
.where(useruid1, '==', true)
.where(useruid3, '==', true)
其中useruid1
,useruid2
,useruid3
是我关注的用户。
所以我需要知道在哪里查询中相等过滤器的数量是否有任何限制。另外,更多的过滤器会影响性能吗?
我在文档中找不到它。对不起,如果我错过了。
答案 0 :(得分:1)
在这种情况下,您需要使用“ OR”或“ IN”查询与一系列AND(即,如果该结果是该用户已订阅的任何用户,则要返回结果)。在这种情况下,您需要创建多个查询/监听器。这是一个小例子
// the posts returned from the queries
const posts = new Map();
// array to unsubscribe from listening to firestore
let postUnsubscribe = [];
// function to subscribe to all user posts
const subscribeToPosts = () => {
usersToFollow = ["user1", "user2", "user3", "user4"];
postUnsubscribe = usersToFollow.map(userToFollow => {
return firestore
.collection("posts")
.where("useruid", "==", userToFollow)
.onSnapshot(handlePost);
});
};
// handles updates to post (for all the users)
const handlePost = querySnapshot => {
for (let change of querySnapshot.docChanges) {
if (change.type === "added" || change.type === "modified") {
posts.set(change.doc.id, change.doc.data());
} else if (change.type === "removed") {
posts.delete(change.doc.id);
}
}