8.7 版本发布—WinterCG 兼容性第一部分
了解更多

在 GitHub 上查看

@nativescript/firebase-firestore

简介

此插件允许您将 Firebase Cloud Firestore 添加到您的 NativeScript 应用中。

image

设置 Firebase

  • 要为您的 NativeScript 应用设置和初始化 Firebase,请按照 @nativescript/firebase-core 插件文档中的说明进行操作。

创建 Firestore 数据库

要创建 Firestore 数据库,请按照 创建 Cloud Firestore 数据库 中的说明进行操作。

将 Firestore SDK 添加到您的应用

要将 Cloud Firestore SDK 添加到您的应用,请安装并导入 @nativescript/firebase-firestore 插件。

  1. 在项目根目录中运行以下命令安装插件。
cli
npm install @nativescript/firebase-firestore
  1. 要添加 Firestore SDK,请导入 @nativescript/firebase-firestore 插件。您应该在应用项目中导入一次插件,最佳位置是在应用引导文件(app.tsmain.ts 等)中。

初始化 Cloud Firestore

要初始化 Firestore 数据库,请通过调用从 @nativescript/firebase-core 插件导入的 firebase 方法返回的 FirebaseApp 实例上的 firestore 方法来创建其实例。

ts
import { firebase } from '@nativescript/firebase-core'
import '@nativescript/firebase-firestore'
const firestore = firebase().firestore()

默认情况下,这允许您使用在平台上安装 Firebase 时使用的默认 Firebase 应用与 Firestore 进行交互。但是,如果您想将 Firestore 与辅助 Firebase 应用一起使用,请在调用 firestore 方法时传递辅助应用实例。

ts
import { firebase } from '@nativescript/firebase-core'
import '@nativescript/firebase-firestore'

// create secondary app instance
const config = new FirebaseOptions()
const secondaryApp = firebase().initializeApp(config, 'SECONDARY_APP')

const firestore = firebase().firestore(secondaryApp)

Firestore 集合和文档

Firestore 将数据存储在 文档 中,这些文档包含在 集合 中。文档还可以包含嵌套的集合。例如,我们的每个用户都将在“users”集合中存储他们自己的“文档”。

写入数据

在将数据写入 Firestore 之前,请参阅 组织数据,了解组织数据的最佳实践。

添加文档

要向集合添加新文档,首先,通过使用集合名称调用 Firestore 实例上的 collection 方法获取集合实例。接下来,使用文档的数据调用 CollectionReference 实例上的 add 方法。

ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .add({
    name: 'Ada Lovelace',
    age: 30,
  })
  .then(() => {
    console.log('User added!')
  })

add 方法会使用随机唯一 ID 将新文档添加到您的集合中。如果您想指定 ID,请改用 DocumentReference 上的 set 方法。

ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .doc('ABC')
  .set({
    name: 'Ada Lovelace',
    age: 30,
  })
  .then(() => {
    console.log('User added!')
  })

set 方法会替换给定 DocumentReference 实例上的任何现有数据。

更新数据

要更新文档的数据,请在文档上调用 update 方法,并将要更新的数据对象传递给它。

ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .doc('ABC')
  .update({
    age: 31,
  })
  .then(() => {
    console.log('User updated!')
  })

该方法还支持通过点表示法更新深度嵌套的值。以下示例更新了 info 对象的属性 address 对象的 zipcode 属性。

ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .doc('ABC')
  .update({
    'info.address.zipcode': 94040,
  })
  .then(() => {
    console.log('User updated!')
  })

更新地理位置点

要更新地理位置数据,请使用纬度和经度实例化 GeoPoint 类,并使用该实例作为要更新的值。

ts
import { firebase } from '@nativescript/firebase-core'
import { GeoPoint } from '@nativescript/firebase-firestore'

firebase()
  .firestore()
  .doc('users/ABC')
  .update({
    'info.address.location': new GeoPoint(53.483959, -2.244644),
  })

更新时间戳

要创建时间戳值,请在 FieldValue 类 上调用 serverTimestamp 静态方法,并将时间戳传递给下面的 update 方法。当您的代码将时间戳传递到数据库时,Firebase 服务器会根据其时间写入新的时间戳,而不是客户端的时间。这有助于解决不同客户端时区的数据一致性问题。

ts
import { firebase } from '@nativescript/firebase-core'
import { FieldValue } from '@nativescript/firebase-firestore'

firebase().firestore().doc('users/ABC').update({
  createdAt: FieldValue.serverTimestamp(),
})

更新数组中的数据

为了帮助管理(添加或删除)数组中的值,API 在 FieldValue 类 上公开了 arrayUnionarrayRemove 方法。

  • 以下代码将 'ABCDE123456' 添加到 fcmTokens 数组(如果不存在)。
ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .doc('users/ABC')
  .update({
    fcmTokens: firestore.FieldValue.arrayUnion('ABCDE123456'),
  })
  • 以下代码从 fcmTokens 数组中删除 'ABCDE123456'(如果存在)。
ts
import { firebase } from '@nativescript/firebase-core'
import { FieldValue } from '@nativescript/firebase-firestore'

firebase()
  .firestore()
  .doc('users/ABC')
  .update({
    fcmTokens: FieldValue.arrayRemove('ABCDE123456'),
  })

删除数据

  • 要删除 Cloud Firestore 中的文档,请获取该文档并在文档引用上调用 delete 方法。
ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .doc('ABC')
  .delete()
  .then(() => {
    console.log('User deleted!')
  })
  • 要从文档中删除特定属性(而不是文档本身),请在 FieldValue 类 上调用 delete 方法。
ts
import { firebase } from '@nativescript/firebase-core'
import { FieldValue } from '@nativescript/firebase-firestore'

firebase().firestore().collection('users').doc('ABC').update({
  fcmTokens: FieldValue.delete(),
})

使用事务更新数据

事务是一种始终确保数据写入使用服务器上最新的可用信息的方式。

想象一下,应用可以“点赞”用户帖子。每当用户按下“点赞”按钮时,“Posts”集合文档上的“likes”值(点赞数)就会递增。如果没有事务,我们将首先需要读取现有值,然后在两个单独的操作中递增该值。

在高流量应用中,服务器上的值在操作设置新值时可能已经发生了更改,导致实际数量不一致。

事务通过原子地更新服务器上的值来消除此问题。如果在事务执行期间值发生更改,它将重试。这始终确保使用服务器上的值而不是客户端值。

您可以在 使用事务更新数据 中详细了解事务。

要使用事务更新文档数据,请按照以下步骤操作

  1. 获取要更新的文档的引用。

  2. 在数据库实例上调用 runTransaction 方法以实例化事务。将接收事务实例的回调函数传递给它。

  3. 在回调函数中,通过将其传递给 get 方法读取步骤 1 中获得的文档。

  4. 通过调用事务对象的 update 方法更新文档,并将文档引用作为第一个参数,将包含要更新的数据的对象作为第二个参数。

ts
import { firebase } from '@nativescript/firebase-core'

function onPostLike(postId) {
  // 1. Create a reference to the post

  const postReference = firebase().firestore().doc(`posts/${postId}`)
  // 2. Instantiate a transaction.
  return firestore().runTransaction(async (transaction) => {
    // 3. Read the document's data
    const postSnapshot = await transaction.get(postReference)

    if (!postSnapshot.exists) {
      throw 'Post does not exist!'
    }
    // 4. Update the document
    transaction.update(postReference, {
      likes: postSnapshot.data().likes + 1,
    })
  })
}

onPostLike('ABC')
  .then(() => console.log('Post likes incremented via a transaction'))
  .catch((error) => console.error(error))

批量写入

如果您不需要在操作集中读取任何文档,则可以将多个写入操作作为包含任何 setupdatedelete 操作组合的单个批次执行。一批写入会原子地完成,并且可以写入多个文档。

要执行批量写入操作,请按照以下步骤进行

  1. 获取要操作的文档的引用。

  2. 通过在 Firestore 数据库实例上调用 batch 方法创建一个新的 WriteBatch 实例。

  3. 在批处理实例上执行操作。

  4. 在调用批处理操作方法后,通过在 WriteBatch 实例上调用 commit 方法提交批处理实例。

以下示例演示了如何在单个操作中删除集合中的所有文档

ts
import { firebase } from '@nativescript/firebase-core'

async function massDeleteUsers() {
  // 1. Documents references
  const usersQuerySnapshot = await firebase()
    .firestore()
    .collection('users')
    .get()

  // Create a new batch instance
  const batch = firebase().firestore().batch()
  // Batch operation: delete
  usersQuerySnapshot.forEach((documentSnapshot) => {
    batch.delete(documentSnapshot.ref)
  })
  // Commit the batch operation
  return batch.commit()
}

massDeleteUsers().then(() =>
  console.log('All users deleted in a single batch operation.')
)

保护您的数据

您必须了解如何在 Firebase 控制台中编写规则以确保您的数据安全。要了解有关 Firestore 安全规则的更多信息,请参阅 Cloud Firestore 安全规则入门

离线功能

Firestore 提供了开箱即用的离线功能支持。在读取和写入数据时,Firestore 使用一个本地数据库,该数据库会自动与服务器同步。即使用户离线,Firestore 功能也会继续运行,并在用户重新连接时自动处理数据迁移到服务器。

此功能默认启用。但是,您可以根据需要禁用它(例如,在包含敏感信息的应用中),方法是将 Firestore 实例的 settings 属性设置为 false。您应该在执行任何 Firestore 交互之前设置此属性。否则,它只会在下一次应用启动时生效。

ts
import { firebase } from '@nativescript/firebase-core'
firebase().firestore().settings.persistence = false

读取数据

Cloud Firestore 使您能够读取集合或文档的值。这可以是一次性读取,也可以是在查询中的数据发生更改时发生的读取。

一次性读取

要读取一次集合或文档,请分别为集合或文档调用 Query.get 或 DocumentReference.get 方法。

ts
import { firebase } from '@nativescript/firebase-core'
const users = firebase().firestore().collection('users')

users
  .doc(documentId)
  .get()
  .then((snapshot) => {
    if (snapshot && !snapshot.exists) {
      conosle.log('Document does not exist')
      return
    }
    console.log(
      `Full Name: ${snapshot.data()['full_name']} ${
        snapshot.data()['last_name']
      }`
    )
  })
  .catch((error) => console.error('Failed to add user:', error))

侦听实时数据更改

要对集合或文档的任何更改做出反应,请在集合或文档上使用事件处理程序函数调用 onSnapshot 方法。以下示例监视 users 集合中的更改。

ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .onSnapshot(
    (snapshot) => {
      console.log('Got Users collection result.')
    },
    (error) => {
      console.error(error)
    }
  )

以下示例监视 userId 文档中的更改

ts
import { firebase } from '@nativescript/firebase-core'

const unsubscriber = firebase()
  .firestore()
  .collection('users')
  .doc(userId)
  .onSnapshot((documentSnapshot) => {
    console.log('User data: ', documentSnapshot.data())
  })

unsubscriber()

Firestore 快照

查询返回结果后,Firestore 会返回 QuerySnapshot(对于集合查询)或 DocumentSnapshot(对于文档查询)。这些快照提供查看数据、查看查询元数据(例如数据是否来自本地缓存)、文档是否存在等功能。

处理 QuerySnapshot

由集合查询的 get 方法返回的 QuerySnapshot 允许您检查集合,例如其中存在多少个文档、访问集合中的文档、自上次查询以来的任何更改等等。

要访问 QuerySnapshot 对象中的文档,请调用 forEach 方法

ts
import { firebase } from '@nativescript/firebase-core'
firebase()
  .firestore()
  .collection('users')
  .get()
  .then((querySnapshot) => {
    console.log('Total users: ', querySnapshot.size)

    querySnapshot.forEach((documentSnapshot) => {
      console.log('User ID: ', documentSnapshot.id, documentSnapshot.data())
    })
  })

QuerySnapshot 的每个子文档都是 QueryDocumentSnapshot,它允许您访问有关文档的特定信息(见下文)。

处理 DocumentSnapshot

DocumentSnapshot 由对特定文档的查询返回,或作为通过 QuerySnapshot 返回的文档的一部分返回。快照提供查看文档的数据、元数据以及文档是否存在的功能。

  • 要查看文档的数据,请在快照上调用 data 方法
ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .doc('ABC')
  .get()
  .then((documentSnapshot) => {
    console.log('User exists: ', documentSnapshot.exists)

    if (documentSnapshot.exists) {
      console.log('User data: ', documentSnapshot.data())
    }
  })
  • 快照还提供了一个辅助函数,可以轻松访问文档中嵌套深度的数据。使用点分隔路径调用 get 方法
ts
import { firebase } from '@nativescript/firebase-core'

firebase()
  .firestore()
  .collection('users')
  .doc('ABC')
  .get()
  .then((documentSnapshot) => {
    return documentSnapshot.get('info.address.zipcode')
  })
  .then((zipCode) => {
    console.log('Users zip code is: ', zipCode)
  })

Firestore 查询

Cloud Firestore 提供了用于查询集合的高级功能。查询适用于一次性读取或订阅更改。

过滤数据

要过滤集合中的文档,请在集合引用上调用 where 方法。过滤支持相等检查和“in”查询。例如,要过滤年龄大于 20 岁的用户,请按如下方式调用 where

ts
import { firebase } from '@nativescript/firebase-core';

firebase().firestore()
  .collection('users')
  .where('age', '>', 20)
  .get()
  .then(...);

Firestore 还支持数组查询。例如,要过滤会说英语 (en) 或意大利语 (it) 的用户,请使用 arrayContainsAny 过滤器

ts
import { firebase } from '@nativescript/firebase-core';

firebase().firestore()
  .collection('users')
  .where('language', 'array-contains-any', ['en', 'it'])
  .get()
  .then(...);

要了解有关 Cloud Firestore 提供的所有查询功能的更多信息,请参阅 在 Cloud Firestore 中执行简单和复合查询

限制数据

要限制从查询返回的文档数量,请在集合引用上使用 limit 方法

ts
import { firebase } from '@nativescript/firebase-core';

firebase().firestore()
  .collection('users')
  .limit(2)
  .get()
  .then(...);

您还可以通过使用 limitToLast 方法限制集合查询中的最后几个文档

ts
import { firebase } from '@nativescript/firebase-core';

firebase().firestore()
  .collection('users')
  .orderBy('age')
  .limitToLast(2)
  .get()
  .then(...);

排序数据

要按特定值对文档进行排序,请使用 orderBy 方法

ts
import { firebase } from '@nativescript/firebase-core';

firebase().firestore()
  .collection('users')
  .orderBy('age', descending: true)
  .get()
  .then(...);

起始和结束游标

要在集合中的特定点开始和/或结束查询,您可以将值传递给 startAtendAtstartAfterendBefore 方法。

ts
import { firebase } from '@nativescript/firebase-core';

firebase().firestore()
  .collection('users')
  .orderBy('age')
  .orderBy('company')
  .startAt([4, 'Alphabet Inc.'])
  .endAt([21, 'Google LLC'])
  .get()
  .then(...);

您还可以通过将其传递给 startAfterDocumentstartAtDocumentendAtDocumentendBeforeDocument 方法来指定 DocumentSnapshot 而不是特定值。例如

ts
import { firebase } from '@nativescript/firebase-core';

firebase().firestore()
  .collection('users')
  .orderBy('age')
  .startAfterDocument(documentSnapshot)
  .get()
  .then(...);

查询限制

Cloud Firestore 不支持以下类型的查询

  • 在不同字段上使用范围过滤器的查询,如上一节所述。
  • 逻辑 OR 查询。在这种情况下,您应该为每个 OR 条件创建一个单独的查询,并在您的应用中合并查询结果。
  • 带有 != 子句的查询。在这种情况下,您应该将查询拆分为大于查询和小于查询。例如,查询子句 where("age", '!=', 30) 不受支持。但是,您可以通过组合两个查询来获得相同的结果集,一个使用子句 where("age", '<', 30),另一个使用子句 where("age", '>', 30)

API

Firestore 类

此类是 FirebaseFirestore 类的包装器,该类表示 Cloud Firestore 数据库,并且是所有 Cloud Firestore 操作的入口点。

app

ts
firebaseApp: = firestore.app

通过该 FirebaseApp 实例访问 Firestore 数据库。

android

ts
firestoreAndroid: com.google.firebase.firestore.FirebaseFirestore =
  firebase().firestore().android

Android 的 Firestore 数据库实例。

ios

ts
firestoreIOS: FIRFirestore = firebase().firestore().ios

iOS 的 Firestore 数据库实例。


settings

ts
settings: Settings = firebase().firestore().settings
//
settings = new Settings()

firebase().firestore().settings = settings

有关说明,请参阅 FirebaseFirestore 类文档中的 getFirestoreSettings()


useEmulator()

ts
firebase().firestore().useEmulator(host, port)

有关说明,请参阅 FirebaseFirestore 类文档中的 useEmulator

参数类型描述
host字符串
port数字

batch()

ts
writeBatch: WriteBatch = firebase().firestore().batch()

创建一个写入批处理实例。有关更多信息,请参阅 FirebaseFirestore 类文档中的 batch()


collection()

ts
collectionReference: CollectionReference = firebase()
  .firestore()
  .collection(collectionPath)

获取数据库中指定路径处的 CollectionReference

参数类型描述
collectionPath字符串集合的斜杠分隔路径字符串。

clearPersistence()

ts
firebase()
  .firestore()
  .clearPersistence()
  .then(() => {
    // do something after clearing
  })
  .catch((err) => {})

有关说明,请参阅 FirebaseFirestlre 类文档中的 clearPersistence()


collectionGroup()

ts
collectionGroup: Query = firebase().firestore().collectionGroup(collectionId)

有关说明,请参阅 FirebaseFirestore 类文档中的 collectionGroup 方法。

参数类型描述
collectionId字符串

disableNetwork()

ts
firebase()
  .firestore()
  .disableNetwork()
  .then(() => {
    // do something after disabling network
  })
  .catch((err) => {})

有关说明,请参阅 FirebaseFirestore 文档中 disableNetwork() 方法的说明。


enableNetwork()

ts
firebase()
  .firestore()
  .enableNetwork()
  .then(() => {
    // do something after disabling network
  })
  .catch((err) => {})

有关说明,请参阅 FirebaseFirestore 文档中 enableNetwork() 方法的说明。


doc()

ts
document: DocumentReference = firebase().firestore().doc(documentPath)

获取数据库中指定路径处文档的 DocumentReference 实例。

参数类型描述
documentPath字符串数据库中文档的斜杠分隔路径字符串。

runTransaction()

ts
firebase()
  .firestore()
  .runTransaction(updateFunction)
  .then((result: any) => {})
  .catch((err) => {})
参数类型描述
updateFunction(transaction: Transaction) => Promise<any>

terminate()

ts
firebase()
  .firestore()
  .terminate()
  .then(() => {
    // do something after disabling network
  })
  .catch((err) => {})

有关说明,请参阅 FirebaseFirestore 类文档中 terminate() 方法的说明。


waitForPendingWrites()

ts
firebase()
  .firestore()
  .waitForPendingWrites()
  .then(() => {
    // do something after disabling network
  })
  .catch((err) => {})

有关说明,请参阅 FirebaseFirestore 类文档中 waitForPendingWrites 方法的说明。


CollectionReference 对象

表示数据库中集合的对象。

id

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceId: string = collectionReference.id

一个返回集合 ID 的 readonly 属性。


path

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferencePath: string = collectionReference.path

一个返回集合路径的 readonly 属性。


parent

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceParent: DocumentReference = collectionReference.parent

一个返回包含此集合的 DocumentReferencereadonly 属性,如果集合是子集合。如果集合是根集合,则返回 null


ios

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceIOS: FIRCollectionReference = collectionReference.ios

一个返回 iOS 的 CollectionReference 实例的 readonly 属性。


android

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceAndroid: com.google.firebase.firestore.CollectionReference =
  collectionReference.android

一个返回 Android 的 CollectionReference 实例的 readonly 属性。


add()

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReference
  .add(dataObject)
  .then((docReference: DocumentReference<T>) => {})
  .catch((err) => {})

使用指定数据向此集合添加一个新文档,并自动为其分配文档 ID。


doc()

ts
collectionReference = firebase().firestore().collection(collectionPath)
document: IDocumentReference<T> = collectionReference
  .doc(documentPath)
  .doc(documentPath)

获取一个 DocumentReference 实例,该实例引用此集合中指定路径处的文档。

参数类型描述
documentPath字符串文档路径。

endAt()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.endAt(snapshot)
// or
query: Query = collectionReference.endAt(fieldValues)
参数类型描述
snapshotDocumentSnapshot
fieldValuesDocumentSnapshot | FieldValue[]

endBefore()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.endBefore(snapshot)
// or
query: Query = collectionReference.endBefore(fieldValues)
参数类型描述
snapshotDocumentSnapshot
fieldValuesDocumentSnapshot | FieldValue[]

get()

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReference
  .get(options)
  .then((querySnapshot: QuerySnapshot) => {})
  .catch((err) => {})
参数类型描述
optionsGetOptions可选

limit()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.limit(limit)
参数类型描述
limit数字可选

limitToLast()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.limitToLast(limitToLast)
参数类型描述
limitToLast数字可选

onSnapshot()

ts
collectionReference = firebase().firestore().collection(collectionPath)
collectionReference.onSnapshot(observer)
//OR
collectionReference.onSnapshot(options, observer)
//OR
collectionReference.onSnapshot(onNext, onError, onCompletion)
//OR
collectionReference.onSnapshot(options, onNext, onError, onCompletion)
参数类型描述
observerIObserver
optionsSnapshotListenOptions
onNext(snapshot: QuerySnapshot) => void可选
onError(error: Error) => void可选
onCompletion() => void可选

观察者接口

ts
interface IObserver {
  complete?: () => void
  error?: (error: Error) => void
  next?: (snapshot: QuerySnapshot) => void
}

orderBy()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.orderBy(fieldPath, directionStr)
参数类型描述
fieldPathkeyof DocumentData
directionStr'asc' | 'desc'默认为 'asc'

startAfter()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.startAfter(snapshot)
// or
query: Query = collectionReference.startAfter(fieldValues)
参数类型描述
snapshotDocumentSnapshot
fieldValuesDocumentSnapshot | FieldValue[]

startAt()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.startAt(snapshot)
// or
query: Query = collectionReference.startAt(fieldValues)
参数类型描述
snapshotDocumentSnapshot
fieldValuesDocumentSnapshot | FieldValue[]

where()

ts
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.where(fieldPath, opStr, value)
参数类型描述
fieldPathFieldPath | keyof DocumentData
opStrWhereFilterOp
value任意

isEqual()

ts
collectionReference = firebase().firestore().collection(collectionPath)
isEqual: boolean = collectionReference.isEqual(other)
参数类型描述
other任意

DocumentReference 对象

表示数据库中文档的对象。

firestore

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
documentReferenceFirestore: Firestore = document.firestore

一个返回此文档的 Firestore 数据库实例的 readonly 属性。


id

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
documentReferenceId: string = document.id

一个返回文档 ID 的 readonly 属性。


path

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
documentPath: string = document.path

一个返回文档路径的 readonly 属性。


parent

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
documentParent: CollectionReference = document.parent

一个返回包含此文档的 CollectionReferencereadonly 属性。


ios

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
documentIOS: FIRDocumentReference = document.ios

一个返回 iOS 的 DocumentReference 实例的 readonly 属性。


android

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
documentAndroid: com.google.firebase.firestore.DocumentReference =
  document.android

一个返回 Android 的 DocumentReference 实例的 readonly 属性。


collection()

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
document.collection(collectionPath)

delete()

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
document
  .delete()
  .then(() => {
    //
  })
  .catch((err) => {})

异步删除此文档。


get()

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    //handle the document data
  })
  .catch((err) => {})

读取文档中的数据。

参数类型描述
optionsGetOptions获取操作的可选设置对象。

GetOptions 接口

ts
enum GetOptions {
  Default = 'default',
  Server = 'server',
  Cache = 'cache',
}

set()

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
document
  .set(data, options)
  .then(() => {})
  .catch((err) => {})

如果文档存在,则使用指定数据覆盖此文档的数据。否则,它会创建文档并将数据保存到文档中。

参数类型描述
data任意要保存的数据。
optionsSetOptions设置操作的可选设置对象。

SetOptions 接口

选项类型描述
mergeundefined | false | true有关说明,请参阅 Firebase 文档上的 merge
mergeFieldsstring[] | IFieldPath[]有关说明,请参阅 Firebase 文档上的 mergeFieldsmergeFields

onSnapshot()

ts
document: DocumentReference = firebase().firestore().doc(documentPath)
document.onSnapshot(observer)

允许您添加一个函数来侦听文档的实时更改事件。onSnapshot 方法具有以下其他重载

ts
document.onSnapshot(observer)
//OR
document.onSnapshot(options, observer)
//OR
document.onSnapshot(onNext, onError, onCompletion)
//OR
document.onSnapshot(options, onNext, onError, onCompletion)
参数类型描述
observerIObserver
optionsSnapshotListenOptions
onNext(snapshot: QuerySnapshot) => void可选
onError(error: Error) => void可选
onCompletion() => void可选

update()

ts
update(data)
  .then(() => {})
  .catch((err) => {})
//OR
update(field, value, moreFieldsAndValues)
  .then(() => {})
  .catch((err) => {})
参数类型描述
data`Partial<{ [K in keyof T]: FieldValueT[K] }>)`
fieldFieldPath
value任意
moreFieldsAndValuesany[]

允许您使用指定数据更新此文档。

DocumentSnapshot 对象

exists

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    docExists: boolean = snapshot.exists
  })
  .catch((err) => {
    // handle any error here
  })

一个返回 true(如果文档存在)或 false(否则)的 readonly 属性。


id

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    docID: string = snapshot.id
  })
  .catch((err) => {
    // handle any error here
  })

一个返回快照 ID 的 readonly 属性。


metadata

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    snapshotMetadata: SnapshotMetadata = snapshot.metadata
  })
  .catch((err) => {
    // handle any error here
  })

一个返回有关快照的元数据的 readonly 属性,描述快照的状态。


ref

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    docReference: DocumentReference = snapshot.ref
  })
  .catch((err) => {
    // handle any error here
  })

一个返回文档的 DocumentReference 实例的 readonly 属性。


android

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    documentSnapshotAndroid: com.google.firebase.firestore.DocumentSnapshot =
      snapshot.android
  })
  .catch((err) => {
    // handle any error here
  })

一个返回 Android 的 DocumentSnapshot 实例的 readonly 属性。


ios

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    documentSnapshotIOS: FIRDocumentSnapshot = snapshot.ios
  })
  .catch((err) => {
    // handle any error here
  })

一个返回 iOS 的 DocumentSnapshot 实例的 readonly 属性。


data()

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    documentSnapshotData: any = snapshot.data()
  })
  .catch((err) => {
    // handle any error here
  })

提取文档数据的字段。


get()

ts
document
  .get(options)
  .then((snapshot: DocumentSnapshot<T>) => {
    documentField: fieldType = snapshot.get(fieldPath)
  })
  .catch((err) => {
    // handle any error here
  })

返回指定字段的值。如果字段不存在,则返回 null

参数类型描述
fieldPathstring | number | FieldPath"返回字段的值,如果字段不存在则返回 null。"

事务类

android

ts
firestore().runTransaction(async (transaction) => {
  // 3. Read the document's data
  const transactionAndroid: com.google.firebase.firestore.Transaction =
    transaction.android
})

返回 Android 的 Transaction 对象。


ios

ts
firestore().runTransaction(async (transaction) => {
  // 3. Read the document's data
  const transactionIOS: FIRTransaction = transaction.ios
})

返回 iOS 的 Transaction 对象。


get()

ts
firestore().runTransaction(async (transaction) => {
  // 3. Read the document's data
  const documentSnapshot: DocumentSnapshot = await transaction.get(
    documentReference
  )
})

读取指定的文档。


delete()

ts
firestore().runTransaction(async transaction => {
    // 3. Read the document's data
    transactionAfterDelete = transaction.delete(documentReference);

  });
}

删除指定的 DocumentReference 实例。


update()

ts
firestore().runTransaction(async (transaction) => {
  // 3. Read the document's data
  const documentSnapshot = await transaction.get(documentReference)

  if (!documentSnapshot.exists) {
    throw 'Document does not exist!'
  }
  // 4. Update the document
  transactionAfterUpdate = transaction.update(documentReference, data)
  // OR
  transactionAfterUpdate = transaction.update(
    documentReference,
    field,
    value,
    moreFieldsAndValues
  )
  //OR
  transactionAfterUpdate = transaction.update(documentReference, data)
})

使用提供的数据更新指定的文档并返回事务。

参数类型描述
documentReferenceDocumentReference 对象要更新的 DocumentReference 实例。
field任意要更新的文档字段。
value任意要设置的新值。
moreFieldsAndValuesany[]

set()

ts
firestore().runTransaction(async (transaction) => {
  // 3. Read the document's data
  const documentSnapshot = await transaction.get(documentReference)

  // 4. Set document data
  transactionAfterSet = transaction.set(documentReference, data)
})

将数据保存到指定的 DocumentReference。如果文档不存在,则创建文档。


许可证

Apache 许可证版本 2.0

下一页
函数