Firebase 数据结构 - 访问每个用户的 jobID
Firebase data structuring - accessing jobIDs for each user
在我的数据库中,我目前有两种对象,用户和工作。我已经将用户 ID 存储在作业中。我还需要在每个用户中存储 jobID 吗?
一个典型的用户:
"-JqzUjcOfddBNd_HtjKb" : {
"contact" : {
"-JqzWcIyD77ZwatEKALp" : {
"email" : "someguy@yahoo.com"
},
"-JqzWrtyni3ZGOKooNF7" : {
"email" : "someguy@outlook.com"
}
},
"country" : "234",
"cv" : "https://linktourl.com",
"dateAdded" : 1433436879708,
"ethnicity" : "0",
"firstName" : "John",
"lastName" : "Smith",
"notes" : {
"-JqzhvtNcueUsPr8xwh8" : {
"date" : 1433440599702,
"user" : "iwrotethisnote@example.com",
"value" : "interested in job; need to interview"
}
},
"roles" : [ true ]
},
和一份典型的工作:
"-Jqz5mOr-DmLcxmTVRPi" : {
"age" : [ "2" ],
"city" : "0",
"clientID" : "-Jqz7goZC76vl94VT0dq",
"dateModified" : 1433431226687,
"longDesc" : "Teacher should have experience",
"notes" : {
"-Jqz6SO74OJOESwOVfkG" : {
"date" : 1433430513294,
"notevalue" : "bill spoke with her",
"userid" : "name@gmail.com"
}
},
"schedule" : "Evening or weekend",
"status" : "needDetail",
"subjects" : {
"15" : true,
"42" : true
},
"title" : "She wants a native speaker"
},
如您所见,作业有一个 clientID 字段,它是用户 ID 的外键(可以这么说)。当我访问用户的信息时,我想知道与他们相关联的那些工作(即他们为其提供了客户 ID)。如何在 Firebase 中执行此操作?
我应该:
更新两个对象,并在客户端对象中保留一个 jobID 数组?
查询所有作业,然后传入那些以用户 ID 作为客户端 ID 的作业。类似于:
// user controller
var jobs = [];
jobsRef.$on('value', function(snapshot) {
snapshot.val().forEach(function(job) {
if (job.clientID = $scope.userID) {
jobs.push(job);
}
}
}
选项 1 使数据冗余(我想这没问题,因为强调非规范化),但它也更可能变得不同步,例如,如果两个更新之一我会制作失败。
选项 2 似乎 运行 慢很多。
您可以使用 firebase 查询的 equalTo()
var jobsRef = new Firebase();
jobsRef.orderByChild("clientID").equalTo($scope.userID)
.on("value", function(snapshot) {
console.log(snapshot.key());
});
更多信息,请查看Query.equalTo()
在我的数据库中,我目前有两种对象,用户和工作。我已经将用户 ID 存储在作业中。我还需要在每个用户中存储 jobID 吗?
一个典型的用户:
"-JqzUjcOfddBNd_HtjKb" : {
"contact" : {
"-JqzWcIyD77ZwatEKALp" : {
"email" : "someguy@yahoo.com"
},
"-JqzWrtyni3ZGOKooNF7" : {
"email" : "someguy@outlook.com"
}
},
"country" : "234",
"cv" : "https://linktourl.com",
"dateAdded" : 1433436879708,
"ethnicity" : "0",
"firstName" : "John",
"lastName" : "Smith",
"notes" : {
"-JqzhvtNcueUsPr8xwh8" : {
"date" : 1433440599702,
"user" : "iwrotethisnote@example.com",
"value" : "interested in job; need to interview"
}
},
"roles" : [ true ]
},
和一份典型的工作:
"-Jqz5mOr-DmLcxmTVRPi" : {
"age" : [ "2" ],
"city" : "0",
"clientID" : "-Jqz7goZC76vl94VT0dq",
"dateModified" : 1433431226687,
"longDesc" : "Teacher should have experience",
"notes" : {
"-Jqz6SO74OJOESwOVfkG" : {
"date" : 1433430513294,
"notevalue" : "bill spoke with her",
"userid" : "name@gmail.com"
}
},
"schedule" : "Evening or weekend",
"status" : "needDetail",
"subjects" : {
"15" : true,
"42" : true
},
"title" : "She wants a native speaker"
},
如您所见,作业有一个 clientID 字段,它是用户 ID 的外键(可以这么说)。当我访问用户的信息时,我想知道与他们相关联的那些工作(即他们为其提供了客户 ID)。如何在 Firebase 中执行此操作?
我应该:
更新两个对象,并在客户端对象中保留一个 jobID 数组?
查询所有作业,然后传入那些以用户 ID 作为客户端 ID 的作业。类似于:
// user controller var jobs = []; jobsRef.$on('value', function(snapshot) { snapshot.val().forEach(function(job) { if (job.clientID = $scope.userID) { jobs.push(job); } } }
选项 1 使数据冗余(我想这没问题,因为强调非规范化),但它也更可能变得不同步,例如,如果两个更新之一我会制作失败。
选项 2 似乎 运行 慢很多。
您可以使用 firebase 查询的 equalTo()
var jobsRef = new Firebase();
jobsRef.orderByChild("clientID").equalTo($scope.userID)
.on("value", function(snapshot) {
console.log(snapshot.key());
});
更多信息,请查看Query.equalTo()