阵列内不允许使用Firebase Firestore时间戳
我有一个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不支持它。因此,
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
时间戳的值填充数组元素