javascript - firestore 中的查询数组

标签 javascript firebase google-cloud-firestore

我必须在 firestore 中保存文档,一份是用户文档,一份是推文文档。我正在尝试复制 Twitter 克隆。所以我的用户有关注者数组。我想向用户显示其推文及其关注者推文。 用户集合为:

{
name:test,
email:test@gmail.com,
follower:[a@gmail.com,b@gmail.com]
}

推文集合是:

{
text:Dummy tweet,
by:test@gmail.com,
img:dummyImageSource
}

我无法弄清楚。如果我使用 test@gmail.com 登录,并且我有一个关注者(假设是 a@gmail.com)。我需要如何查询来获取我的评论(test@gmail.com)和所有关注者(在本例中为a@gmail.com)。

我尝试过做这样的事情:

db.collection("tweets")
            .where("email", "==", this.state.user.email)//loggedin email
        //need to add follower condition as well here so that i get combined tweet

            .orderBy("created", "asc")
            .onSnapshot(snapshot => {
                let oldArr = [];
                console.log(snapshot.docs)
                snapshot.docs.forEach(doc => {
                 console.log(doc)
                });

最佳答案

您需要对推文集合进行两次(或更多)查询。

一份供您的用户使用,另一份供该用户的每位关注者使用。

还要注意查询条件,集合字段是“by”而不是“email”

像这样:

const makeTweetQueryListener = (email) => db.collection("tweets")
            .where("by", "==", email)
            .orderBy("created", "asc")
            .onSnapshot()

Promise.all([
   makeTweetQueryListener(this.state.user.email)
].concat(this.state.user.followers.map(makeTweetQueryListener))
).then(values => {
    values.forEach(query => {
        query.docs.forEach(console.log)
    });
})

编辑 - 更改了上面的代码以添加监听器而不仅仅是查询

关于javascript - firestore 中的查询数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57523586/

相关文章:

javascript - 如何 'unrender' MathJax方程?

javascript - Node 的 log4js 不输出到文件,只输出到控制台

firebase - 我可以在 BigQuery 中可靠地查询 Firebase 日内表并获取 100% 的事件数据吗?

flutter - 云 Firestore : Arrange documents

ios - 有没有办法知道文档何时已从缓存与数据库同步?

javascript - 如何在没有javascript的情况下通过点击他的 child 来更改父元素的CSS属性

javascript - 用 reduce 展平数组数组

Angular2 karma 测试失败 : No provider for Token FirebaseUrl

android - 限制 Firebase API key

firebase - 从 map 数组中的 map 中提取字段