我正在使用 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 云功能调整图像大小,并想设置自定义元数据。
我直接从谷歌的文档中复制了代码
但是,当我重新读取文件时,它根本没有设置元数据。
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