使用Firebase Firestore,我将聊天室的详细信息存储在包含以下数据的文档中:
roomName
roomAvatar
createDate
isDeleted
我的应用程序和规则要求在“创建”文档时设置这些字段。但是,我也希望允许授权用户“更新”文档。
我已经进行了检查,只允许某些用户更新文档,并验证他们不允许修改“createdate”这样的字段。但是,我似乎无法创建一个规则来强制授权用户不删除“createdate”字段,无论是通过传递filedvalue.delete()还是使用ref.set(objectMissingCreateDate)。
allow update: if isAuthenticated() && isMemberOfRoom() &&
(
(!("roomName" in request.resource.data) ||
request.resource.data.roomName == resource.data.roomName ||
hasRoomPermission("UpdateRoom")) &&
(!("roomAvatar" in request.resource.data) ||
request.resource.data.roomAvatar == resource.data.roomAvatar ||
hasRoomPermission("UpdateRoom")) &&
(!("createDate" in request.resource.data) ||
request.resource.data.createDate == resource.data.createDate) &&
(!("isDeleted" in request.resource.data) ||
request.resource.data.isDeleted == resource.data.isDeleted ||
hasRoomPermission("DeleteRoom"))
);
在道格和帕夫评论的帮助下,我意识到我做错了什么。
首先,我不知道一个只传递了几个字段的更新(或带有合并选项的集合)会导致从数据库的resource
复制request.resource
中的其余字段。
其次,request.resource
缺少现有文档字段的唯一方法是设置(不包含merge)或传入fieldvalue.delete()
。
allow update: if isAuthenticated() && isMemberOfRoom() &&
(
("roomName" in request.resource.data &&
(request.resource.data.roomName == resource.data.roomName ||
hasRoomPermission("UpdateRoom"))) &&
("roomAvatar" in request.resource.data &&
(request.resource.data.roomAvatar == resource.data.roomAvatar ||
hasRoomPermission("UpdateRoom"))) &&
("createDate" in request.resource.data &&
request.resource.data.createDate == resource.data.createDate) &&
("isDeleted" in request.resource.data &&
(request.resource.data.isDeleted == resource.data.isDeleted ||
hasRoomPermission("DeleteRoom")))
);
验证后,我试图在/users/处查找用户文档,然后我想使用auth对象中的数据以及一些自定义用户属性更新文档。但我得到一个错误,更新方法不存在。有没有办法更新单个文档?所有firestore文档示例都假定您拥有实际的文档id,并且没有任何示例使用where子句进行查询。
假设我有一个Foo类和一个jax-rs FooResource,它将API公开给CRUD Foos。 Foo表示MongoDB文档。 在FooResource中,我将有如下内容: 问题是,json中的foo对象将只包含已经更改的字段,但我从来不知道它将是什么字段。 我使用带Panache扩展的Quarkus,我看到的唯一方法是从DB检索实体,然后检查从http请求接收到的foo对象中的每个字段,看
问题内容: 我有这个POJO课: 这是我的数据库: 有100名学生,有些活跃,有些则没有。我想让所有学生都不活跃。 码: 如何使用POJO 更新为false?谢谢! 问题答案: 您可以通过非常简单的方式解决此问题。除了getter之外,还应该像这样为您的属性创建一个setter : 创建了setter之后,就可以像这样直接在对象上使用它: 该代码的结果将是将所有学生对象的active属性更新为
假设我有 100 个带字段的文档 地址 现在假设我的业务模式正在改变,我想添加新的现场呼叫。 如何在所有100个文档中添加?NoSQL数据库上有这样的东西吗?
我有一个firestore文档要更新。这是我的密码- 我正在对“merge:true”对象使用“set”方法。因为如果不存在,我想创建一个新文档,如果存在,我想更新数据。 我试图更新的文档正在被我发送的新属性重写,而不是将数据附加到现有文档中。我读到,使用{merge:true}将传入数据与当前数据合并,但这不起作用。我的整个文档正在被新数据替换。 这是我第一次创建文档时的firestore集合-
我有这个POJO类: 这是我的数据库: 有100名学生,有些是活跃的,有些不是。我想让所有学生都不活跃。 法典: 如何使用POJO将更新为假?谢谢!