使用node.js从Firestore中的子集合中删除文档

时间:2018-02-09 15:04:30

标签: node.js firebase google-cloud-firestore

我想从Firebase子集合中删除文档。我试图通过以下方式做到这一点:

firestore.collection('categories').doc(categoryId).collection('books').doc(bookId).delete();

它不起作用。

但是,我可以从集合中删除文档:

firestore.collection('categories').doc(categoryId).delete();

我是否忘记了什么?它应该如何运作?

更新:

const firebase = require('../firebase/firebaseAdmin');
const firestore = firebase.firestore();

module.exports = {
  removeBookFromCategory: (categoryId, bookId) => (
    firestore
      .collection('categories')
      .doc(categoryId)
      .collection('books')
      .doc(bookId)
      .delete()
  ),
};

我在这里有正确的ID,但我收到500错误:

  

错误:参数“documentPath”不是有效的ResourcePath。路径必须   是一个非空字符串。

2 个答案:

答案 0 :(得分:3)

删除具有关联子集的文档时,不会删除子集。它们仍可通过参考访问。 执行时,

firestore.collection('categories').doc(categoryId).collection('books').doc(bookId).delete();

它会删除该文件。但它不会删除子集合。如果要删除子集,则必须手动完成。 请参阅here

答案 1 :(得分:1)

我可能回答得太晚了,但是我想通了。 如果您的数据库具有以下方案: rootCollection->文档->子集合-> documentInsideSubCollection

您可以使用以下代码段删除子集合内的文档:

  firestore.collection(rootCollection)
  .doc(documentName)
  .collection(subCollectionName).ref  
  .where(field, "==", something)
  .onSnapshot(snapshot => snapshot.forEach(result => result.ref.delete()));