Firestore 查询中的 Client SDK 和 Admin SDK 差异

埃利亚斯

在 Firebase 函数中运行查询时,我的查询无法正常工作。它在客户端完美运行,但不适用于函数。想知道是否有办法让它也与 Admin SDK 一起工作。我的查询有什么可怕的错误吗?

参数:

searchQuery = {
  start:
    "[native Date Fri Feb 08 2019 00:00:00 GMT+0200 (Itä-Euroopan normaaliaika)]",
  end:
    "[native Date Fri Feb 08 2019 23:59:59 GMT+0200 (Itä-Euroopan normaaliaika)]",
  cafeIds: ["LI088001"],
  textSearch: "",
  time: { time: "00-24", label: "Kokopäivä" }
}

sort = {
  "column": "created",
  "value": "asc"
}

询问:

let ref = firestoreDB.collection('events')
ref = ref.where('created', '>=', searchQuery.start).where('created', '<=', searchQuery.end)

for (const cafe of searchQuery.cafeIds) {
  ref = ref.where('cafeId', '==', cafe)
}

ref = ref.where(`time.${searchQuery.time.time}`, '==', true)

if (searchQuery.textSearch !== '') {
  ref = ref.where(
    'products.',
    'array-contains',
    lowerCase(searchQuery.textSearch)
  )
}

if (sort.field === 'created') {
  ref = ref.orderBy('created', sort.value)
} else if (sort.field === 'productCount') {
  ref = ref
    .orderBy('created', 'asc')
    .orderBy('productCount', sort.value)
} else if (sort.field === 'total') {
  ref = ref
    .orderBy('created', 'asc')
    .orderBy('total', sort.value)
} else {
  ref = ref.orderBy('created', 'asc').orderBy('eventId', 'asc')
}
const query = await ref.limit(10).get()

将相同的代码放入用打字稿编写的函数时,我收到以下错误:

src/storage/exportCsv.f.ts:25:5 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.
  Property 'id' is missing in type 'Query'.

25     ref = ref.where('created', '>=', searchQuery.start).where('created', '<=', searchQuery.end)
       ~~~

src/storage/exportCsv.f.ts:28:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

28       ref = ref.where('cafeId', '==', cafe)
         ~~~

src/storage/exportCsv.f.ts:31:5 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

31     ref = ref.where(`time.${searchQuery.time.time}`, '==', true)
       ~~~

src/storage/exportCsv.f.ts:34:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

34       ref = ref.where(
         ~~~

src/storage/exportCsv.f.ts:42:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

42       ref = ref.orderBy('created', sort.value)
         ~~~

src/storage/exportCsv.f.ts:44:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

44       ref = ref
         ~~~

src/storage/exportCsv.f.ts:48:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

48       ref = ref
         ~~~

src/storage/exportCsv.f.ts:52:7 - error TS2322: Type 'Query' is not assignable to type 'CollectionReference'.

52       ref = ref.orderBy('created', 'asc').orderBy('eventId', 'asc')
弗兰克·范·普费伦

看起来您在 Admin SDK 中遇到了一些 TypeScript 错误。因此,要么您没有在客户端 JavaScript 中使用 TypeScript,要么服务器上的编译器更加严格。无论哪种方式,您都需要解决每个问题,或者也切换到在 Cloud Functions 中使用纯 JavaScript。

有很多错误,但最常见的似乎是:

类型 'Query' 不能分配给类型 'CollectionReference'。

28       ref = ref.where('cafeId', '==', cafe)

ref先在这里定义

let ref = firestoreDB.collection('events')

由于collection('events) 返回 a CollectionReference,因此ref成为该类型。然后,当您稍后尝试分配ref.where('cafeId', '==', cafe)给它时,它的类型为Query( 的祖先CollectionReference)。所以这是一个类型错误。

解决方案是立即制作ref类型Query

let ref: Query = firestoreDB.collection('events')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有相似数组的Firestore查询文档(Node.js / Admin SDK)

在Firestore Java admin SDK中未收到有关网络断开连接和重新连接的文档更新

Couchbase SDK和Moxi Client

如何在Firestore上以有限的权限使用Admin SDK?

如何使用firestore admin nodejs sdk设置服务器时间戳?

Firebase Admin SDK Android

带有firebase-admin python sdk的Firebase Firestore服务器时间戳

使用firebase-admin sdk和用户电子邮件从firebase中删除用户

在节点中同时使用Firebase Admin SDK和Client SDK

Firestore admin SDK的批量写入限制是多少

使用Admin SDK批量写入Firestore

Python Firebase Admin SDK查询时间戳

在Firebase-admin Python SDK中检索idToken和refreshToken

使用Firebase Admin SDK(NodeJS)将数据导入Firestore不适用于所有集合

无法将“自定义Blob”保存到Firestore-ADMIN SDK

使用Python admin SDK列出所有Firestore集合

Cloud Firestore-Python-如何在使用admin sdk流式传输的文档中获取本地时区

使用admin SDK从Firestore集合中获取所有密钥

在Firestore SDK片段中找不到databaseURL

PHP中的Google Admin SDK

Pivot_SelectionChanged中的SDK 7.1和SDK 8.0冲突

使用服务帐户和Google Admin SDK创建用户?

带有 Java 8 的 App Engine 中的 Firebase Admin SDK

Firestore Java Admin SDK limit() 操作的行为

在 Node js 上初始化 Firestore Admin SDK 时出现身份验证错误

Node JS / Firebase Admin SDK / Firestore - 使用快照接收 Firebase 文档后获取空数组

如何从 Firestore 中的 admin-sdk 集合中获取 uid 以响应

如何为在新模块化 sdk 中的时间戳之后创建的文档创建 Firestore 查询?

如何使用模块化 Web SDK 的版本 9 在 Cloud Firestore 集合中的文档中获取文档和嵌套集合?