Javascript 是否可以检查集合或子集合是否存在?

Javascript 是否可以检查集合或子集合是否存在?,javascript,node.js,firebase,google-cloud-firestore,Javascript,Node.js,Firebase,Google Cloud Firestore,有没有办法检查firestore中是否存在NodeJ的子集合 目前我正在使用doc.exists来处理文档,但我需要检查文档中是否存在子集合,以便写入一些数据。是的,有。您可以使用docs.length了解子集合是否存在 我做了一个示例来指导您,希望对您有所帮助 this.db.collection('users').doc('uid') .get().then( doc => { if (doc.exists) { this.db.collection('u

有没有办法检查firestore中是否存在NodeJ的子集合


目前我正在使用
doc.exists
来处理文档,但我需要检查文档中是否存在子集合,以便写入一些数据。

是的,有。您可以使用docs.length了解子集合是否存在

我做了一个示例来指导您,希望对您有所帮助

 this.db.collection('users').doc('uid')
  .get().then(
  doc => {
    if (doc.exists) {
      this.db.collection('users').doc('uid').collection('friendsSubcollection').get().
        then(sub => {
          if (sub.docs.length > 0) {
            console.log('subcollection exists');
          }
        });
    }
  });

马修斯的回答对我没有帮助。也许随着时间的推移它已经改变了

.collection(..).get()
返回一个具有属性
size
,因此我只执行了以下操作:

admin.firestore
.collection('用户')
.doc('uid')
.集合(“子集合”)
.限额(1)
.get()
.then(query=>query.size);
更准确地说:

const querySnapshot = admin.firestore().collection('users').doc('uid').collection('sub-collection').limit(1).get()
if (querySnapshot.empty) {console.log('sub-collection not existed')}

这就是我如何能够检查集合是否存在的原因

我首先以文档路径为目标,然后如果它存在,则表示该集合随后存在,我可以访问它。

>db.collection(“collection\u name”).document(“doc\u name”).get()
>.addOnCompleteListener(新的OnCompleteListener(){
>@覆盖
>未完成的公共void(@NonNull任务){
>if(task.issusccessful()){
>DocumentSnapshot结果=task.getResult();
>if(result.exists()){
>*//这意味着文档首先存在,因此
>//收集之后,将显示文档名称
>//存在…现在我可以访问集合*
>db.集合(“集合名称”).文档(“文档名称”).集合(“集合名称2”).获取()
>.addOnCompleteListener(task1->{if(task1.issusccessful()){
>       ...
>     } }); } } });

我发现的另一个答案在这里非常有用。这也适用于这里描述的子集合。这很好,但是这实际上不会产生N次读取。如果是这样的话,最好限制返回文档的数量=>*。limit(1)。如果集合不包含任何文档,并且仍然存在,该怎么办?@AkashGorai no.没有空集合。是否需要使用.limit(1)?
>  db.collection("collection_name").document("doc_name").get()
>        .addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
>                     @Override
>                     public void onComplete(@NonNull Task<DocumentSnapshot> task) {
>                         if(task.isSuccessful()){
>                             DocumentSnapshot result = task.getResult();
>                             if(result.exists()){
>                                *//this means the document exist first, hence the 
>                                 //collection afterwards the doc_name will 
>                                 //exist...now I can access the collection*  
> db.collection("collection_name").document("doc_name").collection("collection_name2").get()
> .addOnCompleteListener(task1 -> {    if(task1.isSuccessful()){
>       ...
>     } }); } } });