插件
Firestore
@nativescript/firebase-firestore
简介
此插件允许您将 Firebase Cloud Firestore 添加到您的 NativeScript 应用中。
设置 Firebase
- 要为您的 NativeScript 应用设置和初始化 Firebase,请按照 @nativescript/firebase-core 插件文档中的说明进行操作。
创建 Firestore 数据库
要创建 Firestore 数据库,请按照 创建 Cloud Firestore 数据库 中的说明进行操作。
将 Firestore SDK 添加到您的应用
要将 Cloud Firestore SDK 添加到您的应用,请安装并导入 @nativescript/firebase-firestore
插件。
- 在项目根目录中运行以下命令安装插件。
npm install @nativescript/firebase-firestore
- 要添加 Firestore SDK,请导入
@nativescript/firebase-firestore
插件。您应该在应用项目中导入一次插件,最佳位置是在应用引导文件(app.ts
、main.ts
等)中。
初始化 Cloud Firestore
要初始化 Firestore 数据库,请通过调用从 @nativescript/firebase-core 插件导入的 firebase
方法返回的 FirebaseApp
实例上的 firestore
方法来创建其实例。
import { firebase } from '@nativescript/firebase-core'
import '@nativescript/firebase-firestore'
const firestore = firebase().firestore()
默认情况下,这允许您使用在平台上安装 Firebase 时使用的默认 Firebase 应用与 Firestore 进行交互。但是,如果您想将 Firestore 与辅助 Firebase 应用一起使用,请在调用 firestore
方法时传递辅助应用实例。
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 方法。
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 方法。
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 方法,并将要更新的数据对象传递给它。
import { firebase } from '@nativescript/firebase-core'
firebase()
.firestore()
.collection('users')
.doc('ABC')
.update({
age: 31,
})
.then(() => {
console.log('User updated!')
})
该方法还支持通过点表示法更新深度嵌套的值。以下示例更新了 info
对象的属性 address
对象的 zipcode
属性。
import { firebase } from '@nativescript/firebase-core'
firebase()
.firestore()
.collection('users')
.doc('ABC')
.update({
'info.address.zipcode': 94040,
})
.then(() => {
console.log('User updated!')
})
更新地理位置点
要更新地理位置数据,请使用纬度和经度实例化 GeoPoint 类,并使用该实例作为要更新的值。
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 服务器会根据其时间写入新的时间戳,而不是客户端的时间。这有助于解决不同客户端时区的数据一致性问题。
import { firebase } from '@nativescript/firebase-core'
import { FieldValue } from '@nativescript/firebase-firestore'
firebase().firestore().doc('users/ABC').update({
createdAt: FieldValue.serverTimestamp(),
})
更新数组中的数据
为了帮助管理(添加或删除)数组中的值,API 在 FieldValue 类 上公开了 arrayUnion
和 arrayRemove
方法。
- 以下代码将
'ABCDE123456'
添加到fcmTokens
数组(如果不存在)。
import { firebase } from '@nativescript/firebase-core'
firebase()
.firestore()
.doc('users/ABC')
.update({
fcmTokens: firestore.FieldValue.arrayUnion('ABCDE123456'),
})
- 以下代码从
fcmTokens
数组中删除'ABCDE123456'
(如果存在)。
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 方法。
import { firebase } from '@nativescript/firebase-core'
firebase()
.firestore()
.collection('users')
.doc('ABC')
.delete()
.then(() => {
console.log('User deleted!')
})
- 要从文档中删除特定属性(而不是文档本身),请在 FieldValue 类 上调用
delete
方法。
import { firebase } from '@nativescript/firebase-core'
import { FieldValue } from '@nativescript/firebase-firestore'
firebase().firestore().collection('users').doc('ABC').update({
fcmTokens: FieldValue.delete(),
})
使用事务更新数据
事务是一种始终确保数据写入使用服务器上最新的可用信息的方式。
想象一下,应用可以“点赞”用户帖子。每当用户按下“点赞”按钮时,“Posts”集合文档上的“likes”值(点赞数)就会递增。如果没有事务,我们将首先需要读取现有值,然后在两个单独的操作中递增该值。
在高流量应用中,服务器上的值在操作设置新值时可能已经发生了更改,导致实际数量不一致。
事务通过原子地更新服务器上的值来消除此问题。如果在事务执行期间值发生更改,它将重试。这始终确保使用服务器上的值而不是客户端值。
您可以在 使用事务更新数据 中详细了解事务。
要使用事务更新文档数据,请按照以下步骤操作
获取要更新的文档的引用。
在数据库实例上调用 runTransaction 方法以实例化事务。将接收事务实例的回调函数传递给它。
在回调函数中,通过将其传递给 get 方法读取步骤 1 中获得的文档。
通过调用事务对象的 update 方法更新文档,并将文档引用作为第一个参数,将包含要更新的数据的对象作为第二个参数。
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))
批量写入
如果您不需要在操作集中读取任何文档,则可以将多个写入操作作为包含任何 set
、update
或 delete
操作组合的单个批次执行。一批写入会原子地完成,并且可以写入多个文档。
要执行批量写入操作,请按照以下步骤进行
获取要操作的文档的引用。
通过在 Firestore 数据库实例上调用 batch 方法创建一个新的 WriteBatch 实例。
在批处理实例上执行操作。
在调用批处理操作方法后,通过在
WriteBatch
实例上调用commit
方法提交批处理实例。
以下示例演示了如何在单个操作中删除集合中的所有文档
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 交互之前设置此属性。否则,它只会在下一次应用启动时生效。
import { firebase } from '@nativescript/firebase-core'
firebase().firestore().settings.persistence = false
读取数据
Cloud Firestore 使您能够读取集合或文档的值。这可以是一次性读取,也可以是在查询中的数据发生更改时发生的读取。
一次性读取
要读取一次集合或文档,请分别为集合或文档调用 Query.get 或 DocumentReference.get 方法。
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
集合中的更改。
import { firebase } from '@nativescript/firebase-core'
firebase()
.firestore()
.collection('users')
.onSnapshot(
(snapshot) => {
console.log('Got Users collection result.')
},
(error) => {
console.error(error)
}
)
以下示例监视 userId
文档中的更改
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
方法
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
方法
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
方法
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
import { firebase } from '@nativescript/firebase-core';
firebase().firestore()
.collection('users')
.where('age', '>', 20)
.get()
.then(...);
Firestore 还支持数组查询。例如,要过滤会说英语 (en) 或意大利语 (it) 的用户,请使用 arrayContainsAny
过滤器
import { firebase } from '@nativescript/firebase-core';
firebase().firestore()
.collection('users')
.where('language', 'array-contains-any', ['en', 'it'])
.get()
.then(...);
要了解有关 Cloud Firestore 提供的所有查询功能的更多信息,请参阅 在 Cloud Firestore 中执行简单和复合查询。
限制数据
要限制从查询返回的文档数量,请在集合引用上使用 limit
方法
import { firebase } from '@nativescript/firebase-core';
firebase().firestore()
.collection('users')
.limit(2)
.get()
.then(...);
您还可以通过使用 limitToLast
方法限制集合查询中的最后几个文档
import { firebase } from '@nativescript/firebase-core';
firebase().firestore()
.collection('users')
.orderBy('age')
.limitToLast(2)
.get()
.then(...);
排序数据
要按特定值对文档进行排序,请使用 orderBy
方法
import { firebase } from '@nativescript/firebase-core';
firebase().firestore()
.collection('users')
.orderBy('age', descending: true)
.get()
.then(...);
起始和结束游标
要在集合中的特定点开始和/或结束查询,您可以将值传递给 startAt
、endAt
、startAfter
或 endBefore
方法。
import { firebase } from '@nativescript/firebase-core';
firebase().firestore()
.collection('users')
.orderBy('age')
.orderBy('company')
.startAt([4, 'Alphabet Inc.'])
.endAt([21, 'Google LLC'])
.get()
.then(...);
您还可以通过将其传递给 startAfterDocument
、startAtDocument
、endAtDocument
或 endBeforeDocument
方法来指定 DocumentSnapshot 而不是特定值。例如
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
firebaseApp: = firestore.app
通过该 FirebaseApp 实例访问 Firestore 数据库。
android
firestoreAndroid: com.google.firebase.firestore.FirebaseFirestore =
firebase().firestore().android
Android 的 Firestore 数据库实例。
ios
firestoreIOS: FIRFirestore = firebase().firestore().ios
iOS 的 Firestore 数据库实例。
settings
settings: Settings = firebase().firestore().settings
//
settings = new Settings()
firebase().firestore().settings = settings
有关说明,请参阅 FirebaseFirestore 类文档中的 getFirestoreSettings()。
useEmulator()
firebase().firestore().useEmulator(host, port)
有关说明,请参阅 FirebaseFirestore 类文档中的 useEmulator。
参数 | 类型 | 描述 |
---|---|---|
host | 字符串 | |
port | 数字 |
batch()
writeBatch: WriteBatch = firebase().firestore().batch()
创建一个写入批处理实例。有关更多信息,请参阅 FirebaseFirestore 类文档中的 batch()。
collection()
collectionReference: CollectionReference = firebase()
.firestore()
.collection(collectionPath)
获取数据库中指定路径处的 CollectionReference
。
参数 | 类型 | 描述 |
---|---|---|
collectionPath | 字符串 | 集合的斜杠分隔路径字符串。 |
clearPersistence()
firebase()
.firestore()
.clearPersistence()
.then(() => {
// do something after clearing
})
.catch((err) => {})
有关说明,请参阅 FirebaseFirestlre 类文档中的 clearPersistence()。
collectionGroup()
collectionGroup: Query = firebase().firestore().collectionGroup(collectionId)
有关说明,请参阅 FirebaseFirestore 类文档中的 collectionGroup 方法。
参数 | 类型 | 描述 |
---|---|---|
collectionId | 字符串 |
disableNetwork()
firebase()
.firestore()
.disableNetwork()
.then(() => {
// do something after disabling network
})
.catch((err) => {})
有关说明,请参阅 FirebaseFirestore 文档中 disableNetwork() 方法的说明。
enableNetwork()
firebase()
.firestore()
.enableNetwork()
.then(() => {
// do something after disabling network
})
.catch((err) => {})
有关说明,请参阅 FirebaseFirestore 文档中 enableNetwork() 方法的说明。
doc()
document: DocumentReference = firebase().firestore().doc(documentPath)
获取数据库中指定路径处文档的 DocumentReference
实例。
参数 | 类型 | 描述 |
---|---|---|
documentPath | 字符串 | 数据库中文档的斜杠分隔路径字符串。 |
runTransaction()
firebase()
.firestore()
.runTransaction(updateFunction)
.then((result: any) => {})
.catch((err) => {})
参数 | 类型 | 描述 |
---|---|---|
updateFunction | (transaction: Transaction) => Promise<any> |
terminate()
firebase()
.firestore()
.terminate()
.then(() => {
// do something after disabling network
})
.catch((err) => {})
有关说明,请参阅 FirebaseFirestore 类文档中 terminate() 方法的说明。
waitForPendingWrites()
firebase()
.firestore()
.waitForPendingWrites()
.then(() => {
// do something after disabling network
})
.catch((err) => {})
有关说明,请参阅 FirebaseFirestore 类文档中 waitForPendingWrites 方法的说明。
CollectionReference 对象
表示数据库中集合的对象。
id
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceId: string = collectionReference.id
一个返回集合 ID 的 readonly
属性。
path
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferencePath: string = collectionReference.path
一个返回集合路径的 readonly
属性。
parent
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceParent: DocumentReference = collectionReference.parent
一个返回包含此集合的 DocumentReference
的 readonly
属性,如果集合是子集合。如果集合是根集合,则返回 null
。
ios
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceIOS: FIRCollectionReference = collectionReference.ios
一个返回 iOS 的 CollectionReference
实例的 readonly
属性。
android
collectionReference = firebase().firestore().collection(collectionPath)
collectionReferenceAndroid: com.google.firebase.firestore.CollectionReference =
collectionReference.android
一个返回 Android 的 CollectionReference
实例的 readonly
属性。
add()
collectionReference = firebase().firestore().collection(collectionPath)
collectionReference
.add(dataObject)
.then((docReference: DocumentReference<T>) => {})
.catch((err) => {})
使用指定数据向此集合添加一个新文档,并自动为其分配文档 ID。
doc()
collectionReference = firebase().firestore().collection(collectionPath)
document: IDocumentReference<T> = collectionReference
.doc(documentPath)
.doc(documentPath)
获取一个 DocumentReference
实例,该实例引用此集合中指定路径处的文档。
参数 | 类型 | 描述 |
---|---|---|
documentPath | 字符串 | 文档路径。 |
endAt()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.endAt(snapshot)
// or
query: Query = collectionReference.endAt(fieldValues)
参数 | 类型 | 描述 |
---|---|---|
snapshot | DocumentSnapshot | |
fieldValues | DocumentSnapshot | FieldValue[] |
endBefore()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.endBefore(snapshot)
// or
query: Query = collectionReference.endBefore(fieldValues)
参数 | 类型 | 描述 |
---|---|---|
snapshot | DocumentSnapshot | |
fieldValues | DocumentSnapshot | FieldValue[] |
get()
collectionReference = firebase().firestore().collection(collectionPath)
collectionReference
.get(options)
.then((querySnapshot: QuerySnapshot) => {})
.catch((err) => {})
参数 | 类型 | 描述 |
---|---|---|
options | GetOptions | 可选 |
limit()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.limit(limit)
参数 | 类型 | 描述 |
---|---|---|
limit | 数字 | 可选 |
limitToLast()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.limitToLast(limitToLast)
参数 | 类型 | 描述 |
---|---|---|
limitToLast | 数字 | 可选 |
onSnapshot()
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)
参数 | 类型 | 描述 |
---|---|---|
observer | IObserver | |
options | SnapshotListenOptions | |
onNext | (snapshot: QuerySnapshot) => void | 可选 |
onError | (error: Error) => void | 可选 |
onCompletion | () => void | 可选 |
观察者接口
interface IObserver {
complete?: () => void
error?: (error: Error) => void
next?: (snapshot: QuerySnapshot) => void
}
orderBy()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.orderBy(fieldPath, directionStr)
参数 | 类型 | 描述 |
---|---|---|
fieldPath | keyof DocumentData | |
directionStr | 'asc' | 'desc' | 默认为 'asc' |
startAfter()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.startAfter(snapshot)
// or
query: Query = collectionReference.startAfter(fieldValues)
参数 | 类型 | 描述 |
---|---|---|
snapshot | DocumentSnapshot | |
fieldValues | DocumentSnapshot | FieldValue[] |
startAt()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.startAt(snapshot)
// or
query: Query = collectionReference.startAt(fieldValues)
参数 | 类型 | 描述 |
---|---|---|
snapshot | DocumentSnapshot | |
fieldValues | DocumentSnapshot | FieldValue[] |
where()
collectionReference = firebase().firestore().collection(collectionPath)
query: Query = collectionReference.where(fieldPath, opStr, value)
参数 | 类型 | 描述 |
---|---|---|
fieldPath | FieldPath | keyof DocumentData | |
opStr | WhereFilterOp | |
value | 任意 |
isEqual()
collectionReference = firebase().firestore().collection(collectionPath)
isEqual: boolean = collectionReference.isEqual(other)
参数 | 类型 | 描述 |
---|---|---|
other | 任意 |
DocumentReference 对象
表示数据库中文档的对象。
firestore
document: DocumentReference = firebase().firestore().doc(documentPath)
documentReferenceFirestore: Firestore = document.firestore
一个返回此文档的 Firestore 数据库实例的 readonly
属性。
id
document: DocumentReference = firebase().firestore().doc(documentPath)
documentReferenceId: string = document.id
一个返回文档 ID 的 readonly
属性。
path
document: DocumentReference = firebase().firestore().doc(documentPath)
documentPath: string = document.path
一个返回文档路径的 readonly
属性。
parent
document: DocumentReference = firebase().firestore().doc(documentPath)
documentParent: CollectionReference = document.parent
一个返回包含此文档的 CollectionReference
的 readonly
属性。
ios
document: DocumentReference = firebase().firestore().doc(documentPath)
documentIOS: FIRDocumentReference = document.ios
一个返回 iOS 的 DocumentReference
实例的 readonly
属性。
android
document: DocumentReference = firebase().firestore().doc(documentPath)
documentAndroid: com.google.firebase.firestore.DocumentReference =
document.android
一个返回 Android 的 DocumentReference
实例的 readonly
属性。
collection()
document: DocumentReference = firebase().firestore().doc(documentPath)
document.collection(collectionPath)
delete()
document: DocumentReference = firebase().firestore().doc(documentPath)
document
.delete()
.then(() => {
//
})
.catch((err) => {})
异步删除此文档。
get()
document: DocumentReference = firebase().firestore().doc(documentPath)
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
//handle the document data
})
.catch((err) => {})
读取文档中的数据。
参数 | 类型 | 描述 |
---|---|---|
options | GetOptions | 获取操作的可选设置对象。 |
GetOptions 接口
enum GetOptions {
Default = 'default',
Server = 'server',
Cache = 'cache',
}
set()
document: DocumentReference = firebase().firestore().doc(documentPath)
document
.set(data, options)
.then(() => {})
.catch((err) => {})
如果文档存在,则使用指定数据覆盖此文档的数据。否则,它会创建文档并将数据保存到文档中。
参数 | 类型 | 描述 |
---|---|---|
data | 任意 | 要保存的数据。 |
options | SetOptions | 设置操作的可选设置对象。 |
SetOptions 接口
选项 | 类型 | 描述 |
---|---|---|
merge | undefined | false | true | 有关说明,请参阅 Firebase 文档上的 merge。 |
mergeFields | string[] | IFieldPath[] | 有关说明,请参阅 Firebase 文档上的 mergeFields 和 mergeFields。 |
onSnapshot()
document: DocumentReference = firebase().firestore().doc(documentPath)
document.onSnapshot(observer)
允许您添加一个函数来侦听文档的实时更改事件。onSnapshot
方法具有以下其他重载
document.onSnapshot(observer)
//OR
document.onSnapshot(options, observer)
//OR
document.onSnapshot(onNext, onError, onCompletion)
//OR
document.onSnapshot(options, onNext, onError, onCompletion)
参数 | 类型 | 描述 |
---|---|---|
observer | IObserver | |
options | SnapshotListenOptions | |
onNext | (snapshot: QuerySnapshot) => void | 可选 |
onError | (error: Error) => void | 可选 |
onCompletion | () => void | 可选 |
update()
update(data)
.then(() => {})
.catch((err) => {})
//OR
update(field, value, moreFieldsAndValues)
.then(() => {})
.catch((err) => {})
参数 | 类型 | 描述 |
---|---|---|
data | `Partial<{ [K in keyof T]: FieldValue | T[K] }>)` |
field | FieldPath | |
value | 任意 | |
moreFieldsAndValues | any[] |
允许您使用指定数据更新此文档。
DocumentSnapshot 对象
exists
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
docExists: boolean = snapshot.exists
})
.catch((err) => {
// handle any error here
})
一个返回 true
(如果文档存在)或 false
(否则)的 readonly
属性。
id
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
docID: string = snapshot.id
})
.catch((err) => {
// handle any error here
})
一个返回快照 ID 的 readonly
属性。
metadata
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
snapshotMetadata: SnapshotMetadata = snapshot.metadata
})
.catch((err) => {
// handle any error here
})
一个返回有关快照的元数据的 readonly
属性,描述快照的状态。
ref
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
docReference: DocumentReference = snapshot.ref
})
.catch((err) => {
// handle any error here
})
一个返回文档的 DocumentReference
实例的 readonly
属性。
android
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
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
documentSnapshotIOS: FIRDocumentSnapshot = snapshot.ios
})
.catch((err) => {
// handle any error here
})
一个返回 iOS 的 DocumentSnapshot
实例的 readonly
属性。
data()
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
documentSnapshotData: any = snapshot.data()
})
.catch((err) => {
// handle any error here
})
提取文档数据的字段。
get()
document
.get(options)
.then((snapshot: DocumentSnapshot<T>) => {
documentField: fieldType = snapshot.get(fieldPath)
})
.catch((err) => {
// handle any error here
})
返回指定字段的值。如果字段不存在,则返回 null
。
参数 | 类型 | 描述 |
---|---|---|
fieldPath | string | number | FieldPath | "返回字段的值,如果字段不存在则返回 null。" |
事务类
android
firestore().runTransaction(async (transaction) => {
// 3. Read the document's data
const transactionAndroid: com.google.firebase.firestore.Transaction =
transaction.android
})
返回 Android 的 Transaction 对象。
ios
firestore().runTransaction(async (transaction) => {
// 3. Read the document's data
const transactionIOS: FIRTransaction = transaction.ios
})
返回 iOS 的 Transaction 对象。
get()
firestore().runTransaction(async (transaction) => {
// 3. Read the document's data
const documentSnapshot: DocumentSnapshot = await transaction.get(
documentReference
)
})
读取指定的文档。
delete()
firestore().runTransaction(async transaction => {
// 3. Read the document's data
transactionAfterDelete = transaction.delete(documentReference);
});
}
删除指定的 DocumentReference
实例。
update()
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)
})
使用提供的数据更新指定的文档并返回事务。
参数 | 类型 | 描述 |
---|---|---|
documentReference | DocumentReference 对象 | 要更新的 DocumentReference 实例。 |
field | 任意 | 要更新的文档字段。 |
value | 任意 | 要设置的新值。 |
moreFieldsAndValues | any[] |
set()
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