簡體   English   中英

Firestore 通過函數將文檔 ID 添加到數據

[英]Firestore add Document ID to Data via functions

我希望將 Firestore ID 添加到 DocumentData,這樣我就可以在引用表中的行時輕松使用該 ID,而不必每次調用文檔的屬性時都使用 document.data().property。 相反,我希望能夠調用 document.id.... document.property... 等等。

是否有捷徑可尋? 可能是雲 Function 將自動生成的 ID 添加到文檔數據中?

謝謝!


例子:

export const getSpaces = async () => {
  const spaceDocs = await getDocs(spacesCollection)
  spaceDocs.docs.forEach((spaceDoc) => {
    const spaceID = spaceDoc.id
    const spaceData = spaceDoc.data()
    console.log(spaceID)
    
    spaces.value.push(spaceData)
  })
}

現在,spaces 數組具有包含文檔數據的對象。 但是,我失去了引用文檔 ID 的能力。

或者,我可以將整個文檔添加到數組中,但之后,我必須始終通過在兩者之間包含 data() 來訪問屬性。 即 space.data().name

我敢肯定,有更好的方法

DocumentSnapshot具有您要查找的id屬性。 如果您在文檔中添加內容,則需要先使用doc.data().field_name訪問數據。

您不需要 Cloud Functions 即可將文檔 ID 添加到該文檔的數據中。 如果您查看有關添加文檔的文檔中的第三個代碼片段,您可以了解如何在編寫文檔之前獲取 ID。

在某些情況下,創建具有自動生成的 ID 的文檔引用並在以后使用該引用可能很有用。 對於此用例,您可以調用doc() [不帶任何參數]:

const newCityRef = db.collection('cities').doc(); // 👈 Generates a reference, but doesn't write yet

// Later...
const res = await newCityRef.set({
  newCityRef.id, // 👈 Writes the document ID
  // ...
});

正如其他人評論的那樣,您不需要將 ID 存儲在文檔中。 您還可以在閱讀文檔時將其添加到您的數據中,方法是:

spaceDocs.docs.forEach((spaceDoc) => {
  const spaceID = spaceDoc.id
  const spaceData = spaceDoc.data()
  console.log(spaceID)
  
  spaces.value.push({ id: spaceID, ...spaceData })
})

通過此更改,您的spaces將同時包含文檔 ID 和每個文檔的數據。

在處理另一個問題時,我遇到了解決方案。 其實很簡單:

在聲明新的 Object 時,您可以添加...doc.data()以將 DocumentData 的所有屬性添加到新創建的 Object 中,在使用 id 對其進行初始化后。 無論如何,這對我有用。 結案。

onSnapshot(profilesCollectionRef, (querySnapshot) => {
  const profilesHolder = [];
  querySnapshot.forEach((doc) => {
    const profile = {
      id: doc.id,
      ...doc.data(),
    }
    profilesHolder.push(profile);
    console.log(profile);
  });
            
  profiles.value = profilesHolder;
});
    
onSnapshot(doc(db, "profiles", userId), (doc) => {
  const newProfile = {
    id: doc.id,
    ...doc.data(),
  }
  myProfile.value = newProfile as Profile;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM