阵列内不允许使用Firebase Firestore时间戳

阵列内不允许使用Firebase Firestore时间戳,firebase,google-cloud-firestore,Firebase,Google Cloud Firestore,我有一个firestore数据模型,如下所示 board :{ id: string, name: string, cratedAt: Timestamp, updatedAt: Timestamp, owner: string, columns: [{ name: string, createdAt: Timestamp, updatedAt: Timestamp, }] 问题是我不能在数组中添加时间戳,因为firebase不支持它。因此,

我有一个firestore数据模型,如下所示

board :{
  id: string,
  name: string,
  cratedAt: Timestamp,
  updatedAt: Timestamp,
  owner: string,
  columns: [{
    name: string,
    createdAt: Timestamp,
    updatedAt: Timestamp,
  }]

问题是我不能在数组中添加时间戳,因为firebase不支持它。因此,我的选择是选择单独的根集合并将id存储在“columns”数组中,或者选择子集合。但这不会增加阅读次数,从而增加我的整个交易的价格/账单吗?如何避免这种情况?

实际上,不可能在数组中添加带有
firebase.firestore.FieldValue.serverTimestamp()
的时间戳。有关无法执行此操作的原因的更多详细信息,请参阅。通常的解决方法是将数组更改为贴图

但是云功能还有另一种可能的解决方法:

由于在文档中有两个包含时间戳的字段(
createdAt
updatedAt
),因此可以将这些字段的值(通过
FieldValue.serverTimestamp()
生成)分配给数组元素,并在创建文档时调用云函数

下面的云函数代码显示了如何处理
列中的一个元素。由您来调整它,以覆盖包含多个元素的阵列

exports.updateTimeStampsInArray = functions.firestore
    .document('myCollection/{docId}')
    .onCreate((snap, context) => {

        const newValue = snap.data();
        const createdAt = newValue.createdAt;

        const columnsArray = newValue.columns;

        const newColumnsArray = [];
        newColumnsArray.push({ name: columnsArray[0].name, createdAt: createdAt });

        return snap.ref.update({ columns: newColumnsArray })
    });
您需要按如下方式创建文档:

  db.collection('myCollection')
    .doc('...')
    .set({
      createdAt: firebase.firestore.FieldValue.serverTimestamp(),
      columns: [{ name: 'TheName' }],  
    });
一旦CF运行,它就会用
createdAt
时间戳的值填充数组元素