Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Cloud Firestore文档中列出子集合_Javascript_Firebase_Google Cloud Firestore - Fatal编程技术网

Javascript 如何在Cloud Firestore文档中列出子集合

Javascript 如何在Cloud Firestore文档中列出子集合,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,假设我将这个最小的数据库存储在CloudFireStore中。如何检索子集合1和子集合2的名称 rootCollection { aDocument: { someField: { value: 1 }, anotherField: { value: 2 } subCollection1: ..., subCollection2: ..., } } 我希望能够读取aDocument的ID,但在我get()文档时,只

假设我将这个最小的数据库存储在CloudFireStore中。如何检索
子集合1
子集合2
的名称

rootCollection {
    aDocument: {
        someField: { value: 1 },
        anotherField: { value: 2 }
        subCollection1: ...,
        subCollection2: ...,
    }
}
我希望能够读取
aDocument
的ID,但在我
get()
文档时,只显示字段

rootRef.doc('aDocument').get()
。然后(doc=>
//仅记录[“someField”、“anotherField”],无集合
console.log(Object.keys(doc.data()))
)

在Node.js中,您将使用“ListCollectionId”方法

var firestore = require('firestore.v1beta1');

var client = firestore.v1beta1({
  // optional auth parameters.
});

// Iterate over all elements.
var formattedParent = client.anyPathPath("[PROJECT]", "[DATABASE]", "[DOCUMENT]", "[ANY_PATH]");

client.listCollectionIds({parent: formattedParent}).then(function(responses) {
    var resources = responses[0];
    for (var i = 0; i < resources.length; ++i) {
        // doThingsWith(resources[i])
    }
})
.catch(function(err) {
    console.error(err);
});
var-firestore=require('firestore.v1beta1');
var client=firestore.v1beta1({
//可选的身份验证参数。
});
//迭代所有元素。
var formattedParent=client.anyPathPath(“[PROJECT]”、“[DATABASE]”、“[DOCUMENT]”、“[ANY_PATH]”);
listCollectionIds({parent:formattedParent})。然后(函数(响应){
var资源=响应[0];
对于(变量i=0;i
这在客户端SDK(Web、iOS、Android)中目前不受支持。

中没有详细说明吗

/**
*以批次大小删除集合。请注意,这是正确的
*不递归删除集合中文档的子集合
*/
函数deleteCollection(db、collectionRef、batchSize){
var query=collectionRef.orderBy(“名称”).limit(batchSize);
返回新承诺(功能(解决、拒绝){
deleteQueryBatch(数据库、查询、批大小、解析、拒绝);
});
}
函数deleteQueryBatch(数据库、查询、批大小、解析、拒绝){
query.get()
。然后((快照)=>{
//当没有文件时,我们就完蛋了
如果(snapshot.size==0){
返回0;
}
//批量删除文档
var batch=db.batch();
snapshot.docs.forEach(函数(doc){
批处理删除(文件编号ref);
});
返回batch.commit().then(函数()){
返回快照大小;
});
}).then(函数(numDeleted){

如果(numDeleted似乎他们在Node.js中添加了一个名为
getCollections()
的方法:

firestore.doc(`/myCollection/myDocument`).getCollections().then(collections => {
  for (let collection of collections) {
    console.log(`Found collection with id: ${collection.id}`);
  }
});

这个例子在
/myCollection/myDocument

打印出文档的所有子集合,这些集合不是程序员应该事先知道的吗?您的用例是什么?@VictorNascimento。这个用例处理的是缺少递归删除的问题。我正在尝试删除一个包含子集合的文档,而那些b集合也应该被删除,因为它们是文档的子集合,不再有效。是的,目前我碰巧知道集合的名称,但如果仅仅为了删除单个文档而需要手动枚举树上潜在无限深度的每个子集合,那将是一种可怕的做法。子集合不是t用于引用它们的父文档的成员/属性。递归删除可以在Admin SDK中完成,也可以通过CLI完成。请参阅文档。这不是一个好消息,但至少它即将到来。感谢您的更新。对当前可用的递归删除子集合文档的技术有何建议?@Dan McGrath是firestore只是云数据库更名了?@skylize->触发一个云函数来执行它。@DimuDesigns->No.@Dan McGrath触发一个云函数有什么帮助?你是说
ListCollectionIds
现在在云函数中可用吗?在你发布的所有代码中,与我的问题相关的唯一部分是顶部的注释,“这不会递归删除集合中文档的子集合”。我的特定预期用例是手动递归子集合,以便我可以使用文档中的说明删除它们。但是由于一些疯狂的原因,我无法获得子集合的列表,以知道要删除什么。你想好了吗?
doc.data().someField.subCollection1
文档数据().someField.subCollection1.val()
文档数据().someField.subCollection1.val
?这看起来很有希望。由于这个问题,我不得不放弃使用Firestore,并且没有机会再尝试一次。我希望我的问题为其他人带来更好的体验。如果按照您的建议解决了这个问题,那么我希望有机会再试一次。
firestore.doc(`/myCollection/myDocument`).getCollections().then(collections => {
  for (let collection of collections) {
    console.log(`Found collection with id: ${collection.id}`);
  }
});