Omu*_*kov 5 database-design nosql firebase ionic3 google-cloud-firestore
我计划使用firebase开发类似于instagram的生产就绪混合离子3移动应用程序.我选择firestore nosql来存储数据和查询.
我有在RDMS中设计模式的经验(忽略第二个绿色用户表).但我正在努力为我的应用程序设计NoSql架构.下面我添加了我想将其转换为nosql的RDMS架构.

我想要有效地进行多次查询.
以上列表的简单Sql查询
Select * from photo LIMIT=50我应该如何将照片和用户表转换为firestore NoSql或NoSql以便有效查询?
这是一个建议:
一组名为photos
包含photo以下内容的文件:
creation保存日期(即时间戳)的字段tags作为具有键值对的对象,如{black: true, cats: true},请参阅此帮助文档以了解基本原理: https: //firebase.google.com/docs/firestore/solutions/arrays。下面的 HTML 代码显示了如何使用/查询它comments一组名为users
包含user以下内容的文件:
uid来自身份验证)followedUsers保存用户 id 的对象,后跟当前用户{userId1: true, userId2: true}followedPhotosId保存当前用户后跟的照片 ID 的对象{9HzWzyXmcnBDuhTZKoQw: true, fO0OvzJs9M8p9N0jufte: true}followedPhotos包含以下照片详细信息的子集合以下 HTML 页面显示了如何执行您在帖子中列出的查询,以及一些读取和写入数据的查询:这些最新查询应在多个专门用于在用户关注时保持followedPhotosId对象和集合同步的云函数中使用。followedPhotos新的其他用户和/或当用户(后跟一个或多个用户)添加或删除照片时。
<html>
<head>
<!-- Firebase App is always required and must be first -->
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-app.js"></script>
<!-- Add additional services that you want to use -->
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-database.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-firestore.js"></script>
<script src="https://www.gstatic.com/firebasejs/5.3.0/firebase-functions.js"></script>
</head>
<body>
<script>
// Initialize Firebase
var config = {
apiKey: "",
authDomain: "xxxxx.firebaseapp.com",
databaseURL: "https://xxxx.firebaseio.com",
projectId: "xxxxxx"
};
firebase.initializeApp(config);
var firestoredb = firebase.firestore();
firestoredb.collection("photos").orderBy("creation", "desc")
.get()
.then(function(querySnapshot) {
console.log("YOUR QUERY #1");
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
firestoredb.collection("users").doc("user1").collection("followedPhotos")
.get()
.then(function(querySnapshot) {
console.log("YOUR QUERY #2");
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
firestoredb.collection("photos")
.where('tags.cats', '==', true) //You should create a photo with a "cats" tag
.get()
.then(function(querySnapshot) {
console.log("YOUR QUERY #3");
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
firestoredb.collection("photos").orderBy("creation", "desc").limit(50)
.get()
.then(function(querySnapshot) {
console.log("YOUR QUERY #4, i.e; Select * from photo LIMIT=50");
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
firestoredb.collection("users")
.where('followedUsers.user2', '==', true)
.get()
.then(function(querySnapshot) {
console.log("Get all the users who follows user2. To use in the Cloud Function");
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
firestoredb.collection("users")
.where('followedPhotosId.9HzWzyXmcnBDuhTZKoQw', '==', true)
.get()
.then(function(querySnapshot) {
console.log("Get all the users who follow photo with Id 9HzWzyXmcnBDuhTZKoQw. To use in the Cloud Function");
querySnapshot.forEach(function(doc) {
// doc.data() is never undefined for query doc snapshots
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
firestoredb.collection("users").doc("user1").get().then(function(doc) {
if (doc.exists) {
console.log("Update the followedPhotosId object for user1 after a user she/he follows has added a photo with id abcdefghijklmn. To use in the Cloud Function");
var followedPhotosId = doc.data().followedPhotosId;;
Object.assign(followedPhotosId, {abcdefghijklmn: true});
firestoredb.collection("users").doc("user1").set({followedPhotosId: followedPhotosId});
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
</script>
<body>
</html>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |