Firebase Firestore 是 Google 提供的一种 NoSQL 数据库服务,它提供了灵活的数据模型和强大的查询功能。Firestore 的数据存储在集合(collections)中,集合中包含文档(documents),文档类似于 JSON 对象,可以嵌套其他文档和数组。
Firestore 的安全规则用于控制对数据的访问权限。这些规则是基于 JavaScript 编写的,可以定义谁可以读取、写入或修改数据。
Firestore 的数据类型包括:
Firestore 适用于各种应用场景,包括但不限于:
假设我们有两个集合:users
和 posts
。每个用户可以有多篇帖子,我们希望在 posts
集合中的文档中引用 users
集合中的用户信息。
users 集合
{
"userId1": {
"name": "Alice",
"email": "alice@example.com"
},
"userId2": {
"name": "Bob",
"email": "bob@example.com"
}
}
posts 集合
{
"postId1": {
"title": "First Post",
"content": "This is the first post.",
"userId": "userId1"
},
"postId2": {
"title": "Second Post",
"content": "This is the second post.",
"userId": "userId2"
}
}
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
match /posts/{postId} {
allow read: if request.auth != null;
allow create, update, delete: if request.auth != null && request.resource.data.userId == request.auth.uid;
match /users/{userId} {
allow read: if request.auth != null && request.path.split('/')[1] == 'posts' && request.path.split('/')[2].split('.')[0] == userId;
}
}
}
}
假设我们希望在 posts
集合中的文档中引用 users
集合中的用户数组。
解决方案:
posts
文档中。posts
文档中添加一个字段,存储用户 ID 数组,然后在查询时通过这些 ID 获取用户信息。嵌套文档
{
"postId1": {
"title": "First Post",
"content": "This is the first post.",
"user": {
"userId": "userId1",
"name": "Alice",
"email": "alice@example.com"
}
}
}
引用字段
{
"postId1": {
"title": "First Post",
"content": "This is the first post.",
"userIds": ["userId1"]
}
}
查询用户信息
const postId = 'postId1';
const postRef = firestore.collection('posts').doc(postId);
const userRefs = postRef.data().userIds.map(userId => firestore.collection('users').doc(userId));
Promise.all(userRefs.map(userRef => userRef.get()))
.then(usersSnapshots => {
const users = usersSnapshots.map(snapshot => snapshot.data());
console.log(users);
});
希望这些信息对你有所帮助!
领取专属 10元无门槛券
手把手带您无忧上云