小编zee*_*zee的帖子

带有 orderBy 的 firestore 相等过滤器

我正在使用 Firestore 并且我有非常简单的带有相等过滤器的查询,我需要在其中执行 orderBy (因为我必须限制结果)。我不能在没有 orderBy 的情况下使用 startAfter,因为在这种情况下 Firebase 会引发错误。

FirebaseError:提供给 Query.startAfter() 的参数太多。参数的数量必须小于或等于 Query.orderBy() 子句的数量

但是,我不能将 orderBy 与相等过滤器一起使用。例子:

query.where('tags.supporter', '==', true).orderBy('tags.supporter');
Run Code Online (Sandbox Code Playgroud)

这会引发 Firebase 错误:

FirebaseError:Order by 子句不能包含具有相等过滤器 tags.supporter 的字段

很有趣,这很好用:-

query.where('tags.supporter', '<=', true).where('tags.supporter', '>=', true)
Run Code Online (Sandbox Code Playgroud)

^ 这有效并为我提供了tags.supporter == true,但我不能将它与多个过滤器一起使用。

例子:

query.where('tags.supporter', '==', true).where('tags.volunteer', '==', true)
Run Code Online (Sandbox Code Playgroud)

^ 有效,但我不能在没有 orderBy 的情况下使用 startAfter。但是,如果我尝试使用 orderBy,则会出现错误:-

query.where('tags.supporter', '==', true).where('tags.volunteer', '==', true).orderBy(...)
Run Code Online (Sandbox Code Playgroud)

^ 不起作用!

我不能做 <= >= hack,因为它需要复合索引,但我不能设置它,因为这些是用户添加的标签。

有任何想法吗?

如果这确实是一个限制,那么应该在文档中明确提及它,因为它会影响我的决定。现在,如果这确实是一个限制,我将不得不在我自己的应用程序中构建大量逻辑来过滤结果。

firebase google-cloud-firestore

4
推荐指数
2
解决办法
6492
查看次数

通过 Google Cloud 函数上传文件时未保存元数据

我正在使用 firebase 云功能调整图像大小,并想设置自定义元数据。

我直接从谷歌的文档中复制了代码

但是,当我重新读取文件时,它根本没有设置元数据。

export const generateThumbs = functions.storage.object().onFinalize(async object => {
  const fileBucket = object.bucket; // The Storage bucket that contains the file.
  const filePath = object.name as string; // File path in the bucket.
  const contentType = object.contentType; // File content type.

  const metadata: any = object.metadata || {};

  // First time around this works and logs metadata.
  // I set "isThumb" as false on client. It is set in 
  // the first run!
  // …
Run Code Online (Sandbox Code Playgroud)

javascript metadata google-cloud-storage google-cloud-functions

1
推荐指数
1
解决办法
575
查看次数