查询平面数据firebase,angularfire
Query flat data firebase, angularfire
我将数据按以下结构存储在 firebase 中(图 1)。我遵循了结构化数据的指南,并将其保存在一个平面结构中,其中包含事件和用户的键值对,以允许多对多关系参考。我想使用一个用户 ID 来查找用户有权访问的事件,在纯 javascript 中这很简单(见图 2),但事实证明它很难使用 angularfire,因为我想使用 firebaseObject 或数组.有谁知道如何执行这样的查询?
图1.
{
users: {
user_id1: {
events: {
event_id1: true,
event_id2: true
}
},
user_id2: {
events: {
event_id3: true,
event_id4: true
}
},
user_idN...
},
events: {
event_id1: {
users: {
user_id1: true
}
},
event_id2: {
users: {
user_id1: true
}
},
event_idN...
}
}
图2
// List all of user_id1's events
var ref = new Firebase("https://<<example>>.firebaseio.com/");
// fetch a list of user_id1's events
ref.child("users/user_id1/events").on('child_added', function(snapshot) {
// for each event, fetch it and print it
String groupKey = snapshot.key();
ref.child("events/" + groupKey).once('value', function(snapshot) {
console.log(snapshot.val());
});
});
这是在 AngularFire 中使用 $extend
的绝佳案例。
您正在共享 $event_id
密钥,因此可以在检索到用户后加载事件。
app.factory("UserFactory", function($firebaseObject) {
return $firebaseObject.$extend({
getEvent: function(eventId) {
var eventRef = new Firebase('<my-firebase-app>/events').child(eventId);
return $firebaseObject(eventRef);
}
});
});
app.controller('MyCtrl', function($scope, UserFactory) {
var userRef = new Firebase('<my-firebase-app>').child("users/user_id1/");
var user = new UserFactory();
$scope.event = user.getEvent(user.events.event_id1);
});
我将数据按以下结构存储在 firebase 中(图 1)。我遵循了结构化数据的指南,并将其保存在一个平面结构中,其中包含事件和用户的键值对,以允许多对多关系参考。我想使用一个用户 ID 来查找用户有权访问的事件,在纯 javascript 中这很简单(见图 2),但事实证明它很难使用 angularfire,因为我想使用 firebaseObject 或数组.有谁知道如何执行这样的查询?
图1.
{
users: {
user_id1: {
events: {
event_id1: true,
event_id2: true
}
},
user_id2: {
events: {
event_id3: true,
event_id4: true
}
},
user_idN...
},
events: {
event_id1: {
users: {
user_id1: true
}
},
event_id2: {
users: {
user_id1: true
}
},
event_idN...
}
}
图2
// List all of user_id1's events
var ref = new Firebase("https://<<example>>.firebaseio.com/");
// fetch a list of user_id1's events
ref.child("users/user_id1/events").on('child_added', function(snapshot) {
// for each event, fetch it and print it
String groupKey = snapshot.key();
ref.child("events/" + groupKey).once('value', function(snapshot) {
console.log(snapshot.val());
});
});
这是在 AngularFire 中使用 $extend
的绝佳案例。
您正在共享 $event_id
密钥,因此可以在检索到用户后加载事件。
app.factory("UserFactory", function($firebaseObject) {
return $firebaseObject.$extend({
getEvent: function(eventId) {
var eventRef = new Firebase('<my-firebase-app>/events').child(eventId);
return $firebaseObject(eventRef);
}
});
});
app.controller('MyCtrl', function($scope, UserFactory) {
var userRef = new Firebase('<my-firebase-app>').child("users/user_id1/");
var user = new UserFactory();
$scope.event = user.getEvent(user.events.event_id1);
});