【问题标题】:How to retrieve nodes under two collections from Firestore?如何从 Firestore 检索两个集合下的节点?
【发布时间】:2019-04-11 15:38:42
【问题描述】:

我有这个结构:

- collection(A) // there is two collections in the Firestore in the top.
                   // But I only wrote one the collection because it gets longer
     - doc(918409234)
              -collection(B)
                   - doc(918409234)
                             object is stored here
                   - doc(213123133)
                             object is stored here
                   - doc(332222212)
                             object is stored here
                   - doc(029299292)
                             object is stored here
                   - doc(434352342)
                             object is stored here
     - doc(341234123)
              -collection(B)
                   - doc(918409234)
                   - doc(213123133)
                   - doc(332222212)
                   - doc(029299292)
                   - doc(434352342)
     - doc(341234123)
              -collection(B)
                   - doc(918409234)
                   - doc(213123133)
                   - doc(332222212)
                   - doc(029299292)
                   - doc(434352342)

所以我想检索集合 B 下的节点,但它似乎不起作用。我的代码有什么问题?

何时发布:

 function send() {
     let path = db.collection(A).doc(randomnumber).
     return path.collection(B).doc(randomnumber).set(object);
 }

何时获取:

 function fetch() {
     return db.collection(A).get().then(value => {
        value.forEach((doc => {
            console.log(doc.id, '=>', doc.data());
        }));
        return value;
    }).catch(err => {
        console.log('error found' + err)
        return err;
    })
 }

let snapshot = await firestore.fetch();
console.log('Snapshot: ' + snapshot); // prints [Object, Object]
snapshot.forEach(child => { 
    let query = child.data(); 
    console.log('Each data: ' + query.B); // not printed in the console
});

但我无法获得第一批文件。所以我不能去下一步获取下一个集合(在这种情况下是集合 B)。调用 fetch 方法但仅打印为 [Object, Object]。这段代码有什么问题?我希望在上面的示例中获取三个节点。我做错了吗?我想获取所有分配有随机数的文档

更新

这样问题就解决了。您无法访问嵌套集合(希望从现在开始)。

【问题讨论】:

    标签: node.js database google-cloud-firestore google-cloud-functions


    【解决方案1】:

    如何从 Firestore 中检索两个集合下的节点?

    没有办法做到这一点。 Firestore 查询很浅,它们只从运行查询的集合中获取项目。无法在单个查询中从顶级集合和其他集合或子集合中获取文档。 Firestore 不支持一步跨不同集合的查询。单个查询只能使用单个集合中文档的属性。

    所以我想检索集合 B 下的节点

    如果您想获取 B 集合中的所有文档,您需要知道该文档 ID (918409234) 以便创建正确的引用并相应地查询该子集合。在不知情的情况下,您无法获得这些文件。为了解决这个问题,您应该将该随机文档 ID 存储到一个变量中并在您的引用中使用它,或者将文档 ID 设置为已知 ID,比如用户 ID。

    【讨论】:

    • 我明白,但是当您使用 .doc() 存储对象时,这会生成一个随机 id,因此您可以使用 .doc() 添加对象,但为此,您可以正确获取所有文档这边走?但是为什么在这种情况下不允许呢?
    • “当你使用 .doc() 存储一个对象时,这会产生一个随机 id”,这是正确的。如果您想拥有另一个 id,只需将该 id 作为参数传递给doc('new_id')。您说:“您可以通过这种方式正确获取所有文档吗?”,是的,您可以,但一次只能从一个集合中获取。 “可是为什么在这种情况下不允许呢?”这就是 Firestore 的工作原理。
    • 好的,我明白了。这样这个问题就解决了。非常感谢,但我遇到的另一个问题是集合 A 中的所有文档现在甚至都无法获取。我想知道这是否是因为我的程序错误,而不是 Firestore 所做的事情?感谢您的帮助。
    • @RyoheiArai 不客气。很可能是因为您的代码有问题。如果您遇到新问题,请发布另一个新问题,以便我和其他用户可以帮助您。干杯!
    猜你喜欢
    • 2020-09-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 2018-12-13
    • 2019-08-03
    • 2018-03-22
    相关资源
    最近更新 更多