【发布时间】:2014-10-17 20:27:26
【问题描述】:
我的 Firebase 数据是这样组织的:
+ myappname
+ customers
+ -JV2NQv3GmoM81zdUfTe
+ name: "Mary"
+ age: "24"
+ ...
+ -JV2N9NnItCfz5vB04RS
+ name: "John"
+ age: "32"
+ ...
+ ...
+ ...
如何通过姓名检索客户?
该名称保证是唯一的。
这是我的客户服务,目前:
app.factory('Customer', function ($firebase, FIREBASE_URL) {
var ref = new Firebase(FIREBASE_URL + 'customers');
var customers = $firebase(ref);
var Customer = {
all: customers,
create: function (customer) {
return customers.$add(customer).then(function (ref) {
var customerId = ref.name();
return customerId;
});
},
set: function(customerId, customer) {
return customers.$child(customerId).$set(customer);
},
find: function (customerId) {
return customers.$child(customerId);
},
findByName: function (customerName) { // TODO...
},
delete: function (customerId) {
var customer = Customer.find(customerId);
customer.deleted = true;
customer.$on('loaded', function () {
customers.$child(customerId).$set(customer);
});
}
};
return Customer;
});
我是否应该在每次 findByName() 调用时扫描所有客户?
还是我应该建立类似“二级索引”的东西?
请给点建议,我才刚刚开始... :-(
【问题讨论】:
-
尽管您才刚刚开始,但您已经列出了两个可能的解决方案。 Firebase 允许您按节点名称或其优先级搜索节点。如果您还没有将优先级用于其他任何事情,您可以将名称设置为优先级并使用
Query.startAt和Query.endAt按名称进行选择。如果您已经为其他事情使用了优先级,您确实可以创建一个单独的索引,仅用于将用户名映射到节点名。 -
@Kato:你说得对,我的问题几乎与其他问题完全相同......对不起,我在提问之前没有找到它......
标签: angularjs firebase angularfire angular-services