gpt4 book ai didi

database - 在没有主键的情况下查询 Firestore

转载 作者:行者123 更新时间:2023-12-04 04:09:52 25 4
gpt4 key购买 nike

我希望我的用户能够更新 URL 上的 slug,如下所示:

url.co/username/projectname

我可以使用主键,但不幸的是,Firestore 不允许在设置后对分配的 uid 进行任何修改,因此我创建了一个唯一的 slug 字段。

结构示例:

projects: {
P10syfRWpT32fsceMKEm6X332Yt2: {
slug: "majestic-slug",
...
},
K41syfeMKEmpT72fcseMlEm6X337: {
slug: "beautiful-slug",
...
},
}

修改 slug 的一种方法是删除和复制新文档中的数据,这样做会变得很复杂,因为我有子集合附加到文档。

我知道我可以像这样通过文档键查询:

var doc = db.collection("projects");
var query = doc.where("slug", "==", "beautiful-slug").limit(1).get();

问题来了。

如果我的数据库中有超过 1000 个文档,这会不会非常不切实际,每次我都必须调用一个项目 (url.co/username/projectname) 不会'由于必须查询所有文档,它不会花费 +1000 次读取吗?如果是,正确的方法是什么?

最佳答案

如 StackOverflow 上的此回答所述:https://stackoverflow.com/a/49725001/7846567 ,只有查询返回的文档才算作读取操作。

现在针对您的特殊情况:

doc.where("slug", "==", "beautiful-slug").limit(1).get();

这确实会导致在Firestore服务器上进行大量读取操作,直到找到正确的文档。但是通过使用 limit(1),您将只会收到一个文档,这样一来,只有一个读取操作会被计入您的限制。

使用 where() 函数是解决您的问题的正确且推荐的方法。

关于database - 在没有主键的情况下查询 Firestore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61907878/

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