簡體   English   中英

使用日期作為 Firestore 文檔 ID?

[英]Using a date as Firestore Document Id?

我有一個日記應用程序,我希望每天都有一個文檔。 我的問題是使用 ISO 8601 日期時間字符串作為文檔 ID 是否是一個好習慣。 因為每天只能有一個文檔,所以它是一個唯一的 Id。

或者我應該將日期存儲在文檔中並使用隨機文檔 ID? 什么是更好的選擇?

我想做的一個查詢是檢查是否有具有特定日期(例如今天)的文檔。 如果是這樣,我想獲取該文檔,否則如果今天沒有文檔,我想創建一個。

使用您希望唯一的值作為文檔 ID 是確保唯一性的一種簡單(並且在許多情況下是唯一的)方法。 只要此類順序鍵的吞吐量限制對於您的用例來說是可以接受的(這里似乎就是這種情況),它就是一種確保唯一性的簡單好方法。

看起來不錯,但是 firebase不推薦這樣做 這是因為不建議使用增量文檔 ID 名稱。 這可能是 Customer1、Customer2、... CustomerN,或者在您的情況下是日期。 10-31-21, 11-1-21, 11-2-21, ... 是增量的。

另外,請注意他們的第二個建議:避免在文檔 ID 中使用 / 正斜杠。

或者我應該將日期存儲在文檔中並使用隨機文檔 ID? 什么是更好的選擇?

我會選擇后者。 使用隨機文檔 ID,然后將日期存儲在其中。

話雖如此,最佳實踐,確切地說,最佳實踐。 它們不是規則。 在您的情況下,如果使用日期作為文檔 ID 使其更容易並且需要更少的讀取,則它可能是最佳選擇。

您的用例的解決方案可能是添加一個日期字段並在該日期進行查詢,其中每個文檔仍然會有一個唯一的 ID。

詢問:

      const analyticsCol = await x.ref
        .collection('dishes')
        .where('date', '>=', yesterdayDate)
        .where('date', '<=', new Date()) // today
        .limit(1)
        .get();
    


const getYesterdayDate = () => {
  const yesterdayDate = new Date();
  yesterdayDate.setDate(yesterdayDate.getDate() - 1);
  yesterdayDate.setTime(
    yesterdayDate.getTime() -
      yesterdayDate.getHours() * 3600 * 1000 -
      yesterdayDate.getMinutes() * 60 * 1000
  );
  return yesterdayDate;
};

希望能幫助到你。

暫無
暫無

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

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