【问题标题】:How to query for a document with a reference path?如何查询具有参考路径的文档?
【发布时间】:2019-01-07 01:31:33
【问题描述】:

我正在查询我的歌曲收藏中的一些歌曲,因此我可以通过 http 请求将歌曲数据发送给第三方。在我发送歌曲之前,我需要歌曲的艺术家姓名。我有一个单独的 Artists 集合,其中每个 Artist 文档都有一个“名称”字段。我需要将艺术家姓名与歌曲的其余数据一起发送。

我似乎找不到任何关于 Firebase Admin SDK 的文档,这些文档避免了严格使用引用路径作为字段来获取文档。

exports.songs = functions.https.onRequest((request, response) => {
db.collection('songs')
    .get()
    .then(querySnapshot => {
        querySnapshot.forEach(doc => {
            let data = doc.data()
            let artist = data.artist // reference field to artist document?
            artist.get().then(documentSnapshot => {
            response.send(documentSnapshot)
            })
        })
        })
     .catch(error => {
     console.log('Error getting documents: ', error)
     })
 })

我希望收到引用的艺术家文档的doc.data()。但是,我只是超时了。

【问题讨论】:

  • 那么您要做的就是使用具有唯一值的引用类型值查询单个文档,并且您提前知道完整的引用路径?
  • 什么是data.artist?它是一个字符串吗?如果是,您需要做的是:db.collection('artisList').doc(data.artist).get()... 而不是 artist.get()
  • @DougStevenson song.artist 是对我的artists 集合中的artist 文档的引用。所以我确实提前有完整的参考路径。我不知道,请原谅我在我的问题中不清楚的是如何使用该参考字段来查询被引用的艺术家。另外,感谢您在周日晚上抽出时间阅读我的问题。对此,我真的非常感激。 ' @TonyBui data.artist 是一个引用类型字段。

标签: firebase google-cloud-firestore google-cloud-functions


【解决方案1】:

您可以像查询任何其他字段一样查询引用类型字段。您所要做的就是传入一个 DocumentReference 类型的对象:

const artistRef = db.collection("artists").child("some-artist-id");

db
    .collection("songs")
    .where("artist", "==", artistRef)
    .get()
    .then(...)

【讨论】:

  • 但是如何从歌曲的艺术家参考字段中获取“some-artist-id”?我不应该做这样的事情吗? db.collection('artists') .where(id, '==', song.artist)
  • 我以为你说你“提前”知道参考。听起来你没有。如果您不知道引用的完整路径,您将无法做到这一点,而且我不确定您希望如何在不知道其完整独特价值的情况下找到独特事物。
  • 我想我想如果我查询一个包含对另一个文档的引用字段的文档,这是否意味着我“知道”它的路径?毕竟,在我的歌曲文档中,我有一个名为艺术家的参考字段,其中包含“艺术家/123456”。这不是指向我的艺术家吗?现在我已经查询了我的歌曲,我应该能够访问该参考字段并使用它查询艺术家?
  • 那么您想获取 ENTRE 集合以获取一份文档吗?这在规模上效率非常低,而且成本很高。
  • 好点,我不想为了获得一份艺术家文件而获取整个艺术家收藏。但是,我确实需要获取我的整个歌曲集,遍历它以找到所有摇滚歌曲(简单)。然后,对于我找到的每首摇滚歌曲,我想继续使用歌曲文档中的参考字段获取艺术家的姓名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
相关资源
最近更新 更多