📜  完全解锁的firestore (1)

📅  最后修改于: 2023-12-03 15:39:07.311000             🧑  作者: Mango

完全解锁的Firestore

Firestore是Google推出的一种NoSQL数据库,它提供了实时同步、可扩展性和可靠性等功能,非常适合构建Web和移动应用程序。在这里,我们将详细介绍Firestore的完全解锁,探索其各种功能,以便对程序员有所帮助。

数据建模

Firestore使用文档来存储数据,这些文档类似于关系数据库中的记录。但是,它们也有所不同:每个文档必须有一个唯一标识符,路径表示了该标识符的层次关系。以下是一个简单示例:

const userRef = db.collection('users').doc('alice');

Firestore还允许文档具有内嵌集合,这是一种非常有用的功能。例如,您可以将用户和其朋友的信息存储在同一个文档中:

{
  name: 'Alice',
  email: 'alice@example.com',
  friends: {
    bob: { name: 'Bob', email: 'bob@example.com' },
    carol: { name: 'Carol', email: 'carol@example.com' },
  },
}
实时更新

Firestore提供实时更新功能,当数据库中的数据发生更改时,客户端可以使用回调函数或Promise获取新的文档快照。以下是一个示例:

userRef.onSnapshot((doc) => {
  console.log('Current data: ', doc.data());
});

您还可以使用Query来监听特定集合中的多个文档,以便在任何文档发生更改时收到通知:

db.collection('users').where('age', '>', 25).onSnapshot((querySnapshot) => {
  querySnapshot.forEach((doc) => {
    console.log(`${doc.id} => ${doc.data()}`);
  });
});
安全规则

Firestore的安全规则使您可以限制哪些用户可以读取和写入您的数据。Firestore的安全规则是基于matchallowdeny规则编写的。以下是基本的示例:

service cloud.firestore {
  match /databases/{database}/documents {
    match /users/{userId} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}
批处理操作

Firestore支持事务,这意味着您可以执行涉及多个文档或集合的原子跨多个文档或集合的操作。以下是一个简单示例:

// 原子增加用户余额的操作
async function updateBalance(userId: string, amount: number) {
  const userRef = db.collection('users').doc(userId);
  return db.runTransaction(async (transaction) => {
    const userDoc = await transaction.get(userRef);
    const newBalance = userDoc.data().balance + amount;
    transaction.update(userRef, { balance: newBalance });
  });
}
总结

Firestore具有一系列强大的功能,包括文档和集合的实时同步、安全性、支持嵌套的文档和集合、批处理事务等。这些功能可以帮助程序员构建高效、稳健的Web和移动应用程序。