如果监听器断线超过 30 分钟(例如用户下线),您将被收取读取费用,就像您发布了一个全新的查询一样。
如果启用持久性,这仍然适用吗?
情况一:App离线超过30分钟。启用持久性并从缓存中读取数据。从缓存中读取文档算作读取操作吗?
情况二:App上线但没有添加/修改/删除操作。启用持久性并且所有数据都存在于缓存中。如果没有添加/修改/删除新数据,30 分钟后打开我的应用程序是否会导致读取操作?
我想在创建用户时将电子邮件信息存储在用户文档中。对于使用电子邮件和密码注册的标准用户,我可以简单地调用auth.user().onCreate并在用户文档上设置电子邮件。对于匿名登录,然后链接他们的电子邮件的用户,我如何获取用户文档中设置的电子邮件?有没有办法只使用 Firestore 触发器来做到这一点?难道一个user().onUpdate函数存在吗?我想避免更新用户文档的客户端代码。
我知道我的副本构造函数和重载运算符在这种情况下是相当随意的,但我找人验证我是否正确使用它们,以及正确使用*.
另外,有人可以告诉我为什么每次从任何重载运算符返回*this或Rectangle类型的对象时都会调用复制构造函数吗?
class Rectangle
{
private:
int length;
int width;
static int counter;
public:
Rectangle(int len = 0, int w = 0)
{
length = len;
width = w;
counter++;
}
~Rectangle()
{ counter--; }
static int getCounter()
{ return counter; }
Rectangle(const Rectangle &);
Rectangle operator+ (const Rectangle &);
Rectangle operator= (const Rectangle &);
};
int Rectangle::counter = 0;
Rectangle::Rectangle(const Rectangle &right) : Rectangle()
{
width = right.width;
length = right.length;
}
Rectangle Rectangle::operator+ (const Rectangle &right)
{
width …Run Code Online (Sandbox Code Playgroud) 在新创建的文档上对Firestore规则使用get()会导致返回值为false.如果您等待几秒钟并点击在同一个新文档上调用get()的安全规则,则get()将返回预期值.我在规则和/或代码中遗漏了什么,或者这是Firestore的错误?
service cloud.firestore {
match /databases/{database}/documents {
match /budgets/{budgetId} {
allow read: if resource.data.userId == request.auth.uid;
allow create: if request.auth.uid == request.resource.data.userId;
match /accounts/{accountId} {
allow read, create, update: if userOwnsBudget(); // <--- failing for newly created budget documents
}
function userOwnsBudget() {
return get(/databases/$(database)/documents/budgets/$(budgetId)).data.userId == request.auth.uid;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
const data: Budget = {
userId: userId,
budgetName: budgetName,
currencyType: currencyType
};
try {
const newBudget = await this.afs.collection<Budget>('budgets').add(data);
const accountsCollection: AngularFirestoreCollection<BudgetAccount> = this.afs.collection<BudgetAccount>('budgets/' + newBudget.id + '/accounts');
//Insufficient …Run Code Online (Sandbox Code Playgroud)