gpt4 book ai didi

dart - FieldValue.serverTimestamp()是否添加其他数据?

转载 作者:行者123 更新时间:2023-12-03 03:34:22 26 4
gpt4 key购买 nike

我有以下功能

  Future<void> _updateDocument(String path, {Map<String, dynamic> data}) async {
final Map<String, dynamic> stampedData = {'updatedAt': FieldValue.serverTimestamp()};
if (data != null) stampedData.addAll(data);
try {
print('Updating document : $path with $stampedData');
final DocumentReference documentReference = _fireStore.document(path);
await documentReference.updateData(stampedData);
} on PlatformException catch (error) {
throw UserFriendlyException('Operation Failed', error.message);
}
}

哪个更新某个文档。但我不断收到以下错误

Write failed at groups/YUUjiGgQ6De4IMshWmRF: Status{code=PERMISSION_DENIED, description=Missing or insufficient permissions., cause=null}



因为我有以下规则
incomingData().keys().hasOnly(['updatedAt', 'displayName']) == true

所以我测试了实际有多少把 key ,结果发现有5把 key
function isValidGroupRename(){
return incomingData().keys().hasAll(['updatedAt', 'displayName']) == true &&
incomingData().keys().size() < 6
}

因为此功能通过了测试,但 < 5没有通过。当我在调用更新之前查看数据对象时,所以此行 print('Updating document : $path with $stampedData');告诉我仅更新2个值
Updating document : groups/YUUjiGgQ6De4IMshWmRF with {updatedAt: FieldValue(Instance of 'MethodChannelFieldValue'), displayName: jjjjjgi}

那么FieldValue.serverTimestamp()是否添加字段?如果是的话,这些字段是什么,所以我可以检查它们。

最佳答案

在达到您的安全规则时,FieldValue.serverTimestamp()已转换为正常的日期和时间值。没有额外的数据被写入。

但是,一个常见的错误是request.resource仅包含从客户端写入的数据。它实际上包含操作完成后(如果成功)将存在的数据。

因此,如果文档中有5个字段,并且您要更新其中2个字段:request.resource将包含5个字段,其中2个字段已更新。

另请参阅:

  • Number of update fields in firestore security rules
  • Allow update on single field in firestore
  • 关于dart - FieldValue.serverTimestamp()是否添加其他数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61914764/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com