问题:
对于下面不同的顶级firestore集合,如何限制对除一条路径之外的所有路径的访问
我们正在Firestore中构建一个数据模式,以支持多所学校教师的聊天应用程序
顶级firestore集合包括:
/siteAdminUsers
/schools
/schools/{schoolId}/teachers
/schools/{schoolId}/chats
下面是我们正在尝试的安全规则设置-我们在其中检查:
有效用户身份验证
userClaim变量request.auth.token.
我想为firestore数据库编写一个简单的google云函数,当同一文档中的另一个字段发生更改时,该函数会更新文档中的一个字段。触发的字段名为“copper”,将对字段“coppervalue”进行更新。我为此编写了一个简单的函数,它不会给出任何错误,但也不会更新字段“coppervalue”,所以我想知道我哪里做错了
以下是我的云功能代码:
const functions = require('firebase-functions');
exports.copperupdate = fun
在我的应用程序中可能存在这样一种情况,即完全相同的文档可以被删除,也可以在同一批更新中添加。文档ID和数据将完全相同。如果重要,则首先添加deleteDocument批更新操作。我的假设是,该文件将与以前完全一样。这是正确的假设吗
这可能无关紧要,但我使用的是Xcode、ios和swift。批量更新中的操作将按照您添加它们的顺序进行。因此,对于所描述的情况,文档将在批更新结束时保持不变。如果删除操作是在创建/更新操作之后添加的,则文档将被删除。正如Doug所说,情况总是这样。你自己可以很容易地测
我正在为类似Facebook的社交媒体应用程序设计Firestore数据库,并为用户提供公开发布(包括姓名)或匿名发布的选项。我曾计划将所有帖子放在顶级集合中,并使用uid字段,这样用户就可以检索和编辑自己的帖子。然而,当用户阅读匿名帖子时,这些UID会被拉下,所以很容易被黑客攻击?(例如,查找具有相同UID的非匿名帖子并公开用户。)
所以,现在我想我将把帖子作为用户的子集合,这样就不需要uid了
我的安全顾虑有效吗?如果是,子集合是更好/最好的方法吗
编辑:我的问题不是重复的,或者因为它要求保
我阅读了,不知道是否可以侦听文档值的更改,或者必须侦听文档(所有值)的更改
假设我有一份文件:
{
name: "Los Angeles",
state: "CA",
country: "USA"
}
我只感兴趣的是countrychanges?Firestore侦听器对文档的更改做出响应。无法仅侦听文档中特定字段的更改
如果您有一个特定的用例,文档非常庞大,您可以考虑将字段放入该用例的单独的、附加的文档中。
Firestore事务是否仅在争用情况下(在事务本身期间对基础文档进行更改时)自动重试?或者Firestore会自动重试其他错误情况下的事务吗?它们仅在争用时重试。如果写操作存在其他问题(例如,违反了安全规则、速率限制、文档大小限制),则不会重试
我正在开发一个基于firestore数据库的小型Web应用程序,我只希望某些用户能够访问(读写)数据。它可能是15或20个UID。我已经在根级别创建了一个名为“白名单”的集合,其中每个文档都有用户的UID和几个带有userID、userName和userEmail的字段
然后我写下了我的规则如下:
service cloud.firestore { match /databases/{database}/documents {
match /{document=**} {
我当前正在为数据库使用Firestore,遇到权限不足错误。我不明白的是,当我的路径为
用户/{uid}
但是当它是错误的时候给我允许
对象/{objectID}
安全规则
您的第二个匹配项是否应该嵌套在第一个匹配项中?也许可以检查缩进,因为它不利于可读性。是的,它应该是嵌套的。经过进一步研究,我的问题可能是由于不理解request.resource.data和resource.data之间的差异造成的。有没有可能为我提供一些例子来理解差异以及如何使用它?
service cloud.fires
我有一个名为Users的firestore集合,并试图通过实现在集合中编写文档。我通过dialogflow代理获取用户的姓名和位置,并尝试将其插入到集合中。但是文档没有被插入
1正在从代理设置数据:
name=agent.parameters.name
位置=agent.parameters.location
2向firestore集合用户写入
db.collectionUsers.doc101.set{
姓名:姓名,,
地点:地点}
函数已执行,但文档未插入firestore集合。我错过了什么
我想知道云上阅读Firestore的成本是多少。
例如,应用程序正在加载集合的对象和所有字段。该对象的读取成本是1还是10,因为该对象名称、图像链接、描述、uuid、createDates、price、price、price 3等中有10个字段
如果答案是10,我想是的,那么有可能通过删除我在使用我的应用程序createdates时不需要的字段来减少读取,例如uuid
这样做有什么问题吗
另外,我可以将一些字段组合在一起吗?假设PrsiScord= Price 1/Price 2/Price 3
我有一个用例,在集合a中有一个文档DI和一些字段。当填写完所有必要的字段并保存文档后,我需要在集合B中创建一个文档DV
该文档DV需要从文档DI获取字段,但它还有另一个字段
问题是我需要某种链接,而不仅仅是字段的副本。当我更改这两个文档的公共字段时,我需要查看这两个文档中的更改
firestore能够做到这一点吗?或者我必须自己检查更改并更新它们吗?Firestore本身不会自动在两个文档之间镜像字段
但是,您至少有3个选项:
您可以手动镜像数据——当您写入一个文档时,同时写入两个文档。不过,
我有一个Firestore允许创建规则,如果文档ID已经存在,则禁止创建该文档。我想做的是在发生这种情况时使用不同的随机ID创建一个新文档
例如,我想创建10个ID为1,2,3…10的文档。但是,ID2、3、4已经存在,并且不会被创建,所以我想要创建3个带有随机ID的文档(比如11、12、13)
我怎样才能做到这一点?谢谢。安全规则无法帮助您执行此操作。另外,您所尝试做的不太适合Firestore,我也将讨论这一点
在安全规则中检查任何其他文档内容的唯一方法是调用或,每次规则求值最多只能调用10
我正在使用AppEngine上的Java将记录从CSV上传到firestore。这是我的密码:
Map<String,Object> record = new HashMap<>();
record.put("value", value);
record.put("position", position);
record.put("status", "pending");
records.do
我是app/web开发人员和firebase新手。我只是想了解firestore,并想将其用于我的应用程序和网站。我知道firebase托管,但我是否能够在其他地方(例如Hostgator或其他网站)托管它,并仍然连接到firestore?或者,只有在我的网站使用firebase托管时,它才会起作用吗?任何反馈都会有帮助
我对firebase还不了解,所以我为这个非常基本的问题道歉。是的,这是可能的。您只需使用Firebase的一个选项即可连接到Firebase存储实例。只需根据您的用例在网站的
我想开发一个quize应用程序
数据库中存储了50k个问题
问题文档具有以下属性
{
问题:问题,
fail_score:正确回答此问题的用户数
及格分数:未能回答此问题的用户数
}
我根据不及格分数和及格分数查询问题,因此顺序可以快速更改
现在我只想获取那些用户没有回答的问题。
因此,用户只能看到新问题
首先,我将把回答的问题存储在另一个集合中
(用户文档>回答的问题集合)
然后,我将获取所有这些50k问题,并仅过滤掉那些不在用户\u doc>已回答的\u问题\u集合中的问题
那么它是否足够快
我有一个事件驱动的云函数(用Node.js编写),每当存储桶发生变化时,它就会在Firestore中创建视频集合。但是当我试图从HTTP函数访问相同的数据时,API抛出了一个401未经授权的错误
HTTP函数:
exports.getVideos = (req, res) => {
db.collection('video').get().then(querySnapshot => {
return res.status(200).json({
我有一个返回所有产品的函数,当且仅当对象中定义了特定类别时
我要做的是在函数上传递一个数组参数,该函数包含一个类别名称数组,如[香蕉、苹果、橘子],我想得到所有包含这些水果的产品作为类别
问题是,我需要在该函数中传递一个数组
const类别:字符串[]=['apple','banana','orange'];
按类别获取建议的产品(类别){
this.products\u collection=this.afs.collection('products',ref=>
ref.where(`cat
我一直与Firestore合作,并习惯于部署我的网站,让人们对其进行测试。一个月过去了,现在部署的网站似乎不起作用。我相信这是因为我在这段时间没有写任何规则。我读到,如果我这样做,我将无法访问我的数据库
我是否可以在任何时候应用这些规则,然后它就会恢复正常,或者我是否应该启动一个全新的项目并重置配置
考虑到我的项目在可预见的未来将经历许多关键性的变化,我认为在这一点上编写规则并不重要
有没有一种简单的方法可以让我现在不能写规则,让一切都正常运转?我将原来的规则更改为将来的日期,但是当我部署项目时
我正在尝试将一个预定的云功能部署到GoogleFirebase,比如
无论何时,只要我“每1分钟”部署一次计划,它就会得到很好的部署。然而,如果我尝试做其他事情,比如“每60分钟”、“每8小时”,我会得到以下错误
我甚至没有得到有关错误的信息,因此很难调试
exports.bookingReminder = functions.pubsub.schedule('every 1 minutes').onRun((context) => {
let today = new Date()
管理员可以管理许多论坛,用户可以是许多论坛的成员。如果发现某个管理员是某个用户所属论坛的管理员,则该管理员应有权读取该用户的个人资料数据。安全规则必须能够比较两个地图,看看它们是否有一个共同的forumID,大致如下:
// WARNING: INVALID CODE
"accounts": {
".read": "auth.token.permissions.fundIDsAdminMap.doAnyKeysMatch(resource.data.fundIDsMemberMap) ==
我需要在firestore特定文档上触发一个云函数,该文档是根据“不存在这样的“事件”读取的
有人能指导我吗?从数据库读取数据时,无法触发云函数
请求此功能的典型原因是您希望转换用户正在读取的数据。为此,有两种常见的方法:
实现读取数据的云函数,通常作为HTTPS触发函数或可调用函数。然后,此云函数连接到数据库,读取基本数据,将数据转换为您想要的数据,并将其返回给用户
无论何时写入/更新数据,都要实现转换。这是一种更为惯用的NoSQL方法,您可以在写操作上做额外的工作,从而使读操作变得更简单、更
在我的Ionic3项目中,我的数据库是CloudFireStore。当我使用语法将this.afAuth.Auth.currentUser.metadata记录到Firebase.Auth.UserMetadata的值时(afAuth是angularfeauth),我得到了firestore中提到的变量creationTime和lastSignInTime,但还有两个附加变量'a'和'b'。这两个变量都包含13个字符的数值。有人能解释这些变量是什么吗
我有一个名为“users”的集合,我想添加一个名为“status:boolean”的新字段,以立即使用云函数和firestore数据库创建每个文档。没有批量更新操作,因此您必须:
查询所有文档的集合
迭代每一个
使用新字段更新文档
要更新文档,您需要知道其确切路径。这意味着您需要单独更新每个文档,并且在编写文档之前需要读取文档或至少读取其ID。看见
我的页面很小,每天大约有300-1000次访问。但在某个时候,我开始积累大量firestore读取请求:
直到第八天,每天大约有5万英镑。我一直在推动新的代码,所以我不知道我做了什么。看这一页,我没有看到任何异常。谷歌或firestore中有什么我可以查看的日志吗?目前无法跟踪读取的来源。您现在看到的是可用的最佳指标
请记住,Firebase和云控制台实时显示文档更新,每次文档更新都需要一次读取。如果您在繁忙的收集中保持控制台打开,它将堆积读取。目前无法跟踪读取的来源。您现在看到的是可用的最佳
我正在创建一个数据库集合,其中将包含一个子集合,该子集合将包含根级别内容的旧版本。集合结构看起来与以下结构非常相似:
Firestore根目录
|
---内容(收集)
|
---contentId(谷歌生成)(文档)
|//此处为最新字段
----|
---历史(次收集)
|
---oldContentId
//此处为旧字段/值
---oldContentId2
//此处为旧字段/值
因此,如果我想获得旧版本的内容,我可以调用:
const oldContent=wait fs.collec
我正在使用Firestore编写一个web应用程序,它需要能够显示今天流行的帖子,而且在考虑不同时区的用户时,我很难正确地查询
日期以UTC 0的形式存储在数据库中,然后通过调整客户端中当前用户的UTC偏移量。这是正确的
添加新帖子时,我使用firebase.firestore.FieldValue.serverTimestamp将当前服务器时间戳存储在名为timestamp的字段中,如下所示:
const collectionRef = db.collection('posts');
coll
我在为firestore项目设置规则时遇到了一些麻烦。我试图学习数据库设置,但找不到任何解决方案。因此,当我尝试从我的收藏“列表”中获取文档时,没有问题。但是当我试图获取集合“列表”中的所有文档时,xcode告诉我“缺少或权限不足”。
我的目标是让用户能够在集合“列表”中创建文档,但只能在文档数组“成员”中显示的“列表”中读取文档
现在我可以在集合(“列表”)中添加文档,没有任何问题,但我无法阅读它们。我只能从带有特定目标的xcode中逐个读取它们
有什么建议吗
service cloud.fi
我有一个应用程序,它使用Firebase SDK从应用程序内部直接与之对话。我的代码确保只以合理的间隔写入数据。但是恶意用户可能会从我的应用程序中获取配置数据,并使用它将源源不断的数据写入我的数据库
我如何确保用户只能每隔几秒钟写一次,而不必写任何服务器端代码。对数据库的每一次读写操作都由您为项目配置的服务器在谷歌服务器上进行验证。这些规则只能由项目的合作者设置,但适用于访问项目中数据库的所有客户端代码。这意味着您可以在这些安全规则中强制执行此条件,即使恶意用户也无法绕过它们,因为他们无权访问您
在本地运行Firestore emulator并使用以下URI点击它时,我遇到以下错误:
http://localhost:8025/v1/projects/my-项目/数据库/数据库/文档/城市/洛杉矶
{
“错误”:{
“代码”:400,
“消息”:“Document parent name\”项目/my project/databases/db/documents/cities\”在索引56处缺少“/”,
“状态”:“无效的_参数”
}
}
我使用API参考作为指南。我的项目名称构造哪
我正试图实现一种在Firestore中保持一致性的方法,但我需要一种找到所有存在重复数据的位置的方法。firestore中是否有方法查找其子集合包含具有特定文档ID的文档的所有文档?例如,对于以下结构
Users(collections){
1234(document){
Name:
Friends(collection){
5678(document) {
Name:
}
我们正在开发一个应用程序,客户端是Flutter,服务器端是Firebase。我正在考虑使用基于每个用户时间戳的云调度器定期运行云功能。
我的想法是每天12:00使用云调度器运行云功能。只有时间戳超过10天的用户才能执行特定操作。这是最佳实践吗
或者可以使用用户的时间戳作为触发器来处理云函数吗?
例如,当用户的时间戳已过10天时,就会触发云函数
更新
情况如下
云火库
/user/${userId}/funcStatus/status
文档(状态)字段为
我想在10天后,也就是11/1
我在Firestore中的不同文档中有一个数组,如下所示:
颜色:
[蓝、红、绿]
我想通过查询找到与我的输入相匹配的文档,颜色:[红、绿、蓝]。但它不应该返回包含更多内容的文档,即[蓝色、红色、绿色、黄色]。它必须精确匹配,但我不一定知道数组中项目的顺序。这可能吗?首先,为每个包含数组长度的文档添加一个字段,以便您可以根据数组长度进行筛选。然后为具有正确长度的数组创建一个复合查询,并为每种颜色创建一个“array contains”子句
请注意,您正在搜索的特定数组不得包含任何重复元素,否则此
因此,我有一个查询(失败)。它是这样写的:“作为我的用户,我可以为一个组织列出我所参与的所有业务”
以及保护它的安全规则(要点):
基本上,它会在用户文档中查找用户的角色(该文档由该企业拥有)。这种类型的规则(使用get()运算符)适用于{businessId}的子集合(例如,查询订单),但不适用于尝试列出业务的查询
现在我知道,organizationUid是一个有效的约束,但通过阅读,我可以理解为什么Firestore不能在不读取大量数据的情况下验证此声明
问题是,那么我该如何解决这个问题呢
假设我正在收听bar集合中foo小于5的所有项目
let listener = db.collection("bar").where("foo", "<", 5).onSnapshot()
let listener=db.collection(“bar”)。其中(“foo”,4)。其中(“foo”,4)
我可以在不取消订阅的情况下修改我的侦听器吗
不,这是不可能的。您需要取消订阅,创建一个新的查询对象,然后订阅新的查询对象。或者
是否有计算firestore读写操作的工具?
或者您通常如何手动统计每个操作?
谢谢 没有工具可供您对Firestore数据库中的操作进行计数,您需要手动跟踪它们。我宁愿建议您执行所描述的估算,如果您试图做的是获得您将在本月收到的账单的估算
如果您对当前执行的读取次数有疑问,我建议您阅读一篇文章,这篇文章可能会对您的阅读主题有所帮助。@MasahiroAoki会这样做吗?
我正试图使用从使用get()派生的Firestore资源属性id获取文档的密钥,如下所示:
get(/databases/$(database)/documents/the/$(path)/is/$(request.resource.data.here)).id
我认为id不可用。我尝试过使用exists()进行模拟,但最后没有使用id属性,因此我知道资源在那里,路径是正确的
以下是我引用的Firestore安全规则文档:
不确定我尝试获取id的方法是否不正确或不可用?我也有同样的问题,看起来i
firestore对读取、写入和删除操作收费,但未提及更新案例
firestore更新文档是免费的,还是视为写入操作?
在定价页面中,未提供有关更新文档案例的详细信息无论何时创建或更改文档,包括使用更新方法,都会对写入进行计费
在安全规则中是否有测试输入类型的方法
我能想到的最好办法是:
if request.resource.data.lastOpened.toMillis() > 0
您可以使用is运算符。例如:
value is bool
value is string
value is timestamp
您可以在此处看到完整的类型列表:您可以使用is运算符。例如:
value is bool
value is string
value is timestamp
您可以在此处看到完整的类
例如,有没有一种方法可以从我的服务器发出JWT或其他东西,让他们能够访问特定的文档,而不需要他们通过Firebase身份验证?我希望他们能够直接从Firestore阅读,但不需要帐户,同时不向所有人开放文档。Firestore不提供任何与Firebase身份验证无关的授权形式。或者,换句话说,Firebase Auth帐户是唯一受支持的机制,用于区分哪些人可以读写文档
听起来您可能应该创建自己的后端端点来接受令牌,检查其有效性,并确定该令牌的持有者是否能够读取所请求文档的内容。后端必须直接执行查
当我在firebase控制台中看到我的数据时,它将如下所示
我正在编写firestore安全规则来保护数据
安全规则:
match /wallpost/{wallpostId} {
allow read: if true;
allow list: if request.query.limit <= 10;
allow create, update, delete: if resource.data.createdBy
在多台设备上运行的应用程序是否可能拥有自己的Firestore数据库,设备用户可以通过自己的登录访问该数据库?否。您通常会让每个用户访问数据库中自己的集合或子集合,由其Firebase身份验证用户id标识,然后使用保护该集合。否。您将为每个用户创建一个包含子项的数据库,以保留其所有数据。这种结构在应用程序中非常常见。您还可以添加只有用户才能访问自己数据的安全功能,以确保数据是独立的谢谢。是否可以使用MongoDB Atlas?或者有没有其他方法可以让用户在使用数据库服务时付费?我不知道这些。你应
我正试图找到一种方法,在一组“对象”文档中执行OR查询
每个对象文档都有一个“类型”字段,它是一个数组
object1:
- name:
- description:
- types:["type-a","type-b","type-d"]
- createdOn
object2:
- name:
- description:
- types:["type-a","type-d"]
- createdOn
object3:
- name:
- description:
我最近加入了一个使用firebase的项目,我正在研究安全规则,我能够成功地为几乎所有事情创建规则,并在大多数情况下创建单元测试。不幸的是,我忘记了在创建一些文档之后正在进行的事务。例如,一旦创建了请求,它也会添加到属于它的每个用户、消费者和提供者的请求中
match /Requests/{requestId} {
allow read: if readRequest();
allow create: if createRequest();
}
match /Users/{use
我尝试了几个小时使用云功能更新我的应用程序中存储在cloud firestore中的用户分数,但我遇到了这个错误,我无法解决这个问题
这是我的代码:
const auth = require('firebase/auth');
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const FieldValue = require('f
我是RxJs的新手。是否有可能解决此类透视表问题
假设我有一个包含任意数量项的流
每个项目都是一个介于0和999之间的数字
我想用这条小溪做一张桌子。有10列的表
项目的列号等于项目除以10。所以数字654将转到第6列
因为我们有一个随机数目的项目,因为数字是以随机顺序到达的,所以列的高度会不同
如何在流上操作以逐个生成表的行以显示表
更新
使用Fan Cheung解决方案(如下所述),使用RxJs很容易生成列。但是,是否也可以随后使用RxJs生成行(行数组),以便能够呈现如下所示的表
柱
具有顺序值索引字段的集合对该集合施加每秒500次写入的限制。子集合组如何影响该限制?例如,考虑这个数据模式:
[collection]
<documentId>
+ indexed field
- index-exempt field
[subcollection]
<documentId>
...
[products]
<productId&
我有一个文档集合,其中有些字段任何人都只能读,有些字段只有管理员才能读/写。我的规则看起来像
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /MyCollection/{document=**} {
allow read: if request.auth.token.admin == true;
allow write:
我正在使用swagger openAPI检索firestore的数据。我想从swagger而不是firestore应用安全性,当我这样做并执行GET request时,UI会显示存储在firestore上的数据,而不会显示未经验证的消息
我在firestore中有一个“用户”集合。每个文档都有一个用户名作为其密钥,并在其中包含一个名为“通知”的集合
下面的代码在应用程序加载时运行,大概是设置了一个事件侦听器来检测何时发生更改
const notificationRef=this.$db.collection(USERS).doc(this.currentUser().userName).collection(“通知”);
通知参考
.onSnapshot(快照=>{
snapshot.docChanges().forEach(更
我的Firestore数据库的结构如下
vendors (collection):
[
vendor_ids(docs): [
products(collection):[
product_ids(docs): {product_object} (data)
]
]
]
我想要像=>
firestore.collection(vendors).doc('{wildcard_vendor_id}').collections("products).
1 2 3 4 5 6 ...
下一页 最后一页 共 20 页