【发布时间】:2014-10-06 00:44:55
【问题描述】:
我有这个数据结构,todos 按照路径 /todos/uid/ 进行组织
{
"metausers" : {
"simplelogin:1" : {
"displayName" : "John Doe",
"provider" : "password",
"provider_id" : "1"
},
"simplelogin:2" : {
"displayName" : "GI Jane",
"provider" : "password",
"provider_id" : "2"
}
},
"todos" : {
"simplelogin:1" : {
"-JUAfv4_-ZUlH7JqM4WZ" : {
"completed" : false,
"done" : false,
"group" : false,
"private" : false,
"subject" : "First"
},
"-JUAfveXP_sqqX32jCJS" : {
"completed" : false,
"done" : false,
"group" : false,
"private" : true,
"subject" : "Second"
},
"-JUAfwXnMo6P53Qz6Fd2" : {
"completed" : false,
"done" : false,
"group" : false,
"private" : false,
"subject" : "Third"
}
},
"simplelogin:2" : {
"-JUAg9rVemiNQykfvvHs" : {
"completed" : false,
"done" : false,
"group" : false,
"private" : false,
"subject" : "Q first"
},
"-JUAgAmgPwZLPr2iH1Ho" : {
"completed" : false,
"done" : false,
"group" : false,
"private" : false,
"subject" : "Q second"
},
"-JUAgBfF8f7V5R5-XgrY" : {
"completed" : false,
"done" : false,
"group" : false,
"private" : true,
"subject" : "Q third"
}
}
}
}
我想查询 todos 以获取带有private:true 的所有记录。这可能使用firebase(angularfire)吗?我应该怎么做?或者我应该更多地去规范化并安排路径 /private 以避免走下 todos ?
【问题讨论】:
-
Firebase 可以根据节点的名称或节点的优先级来查询数据。如果您的
private属性不是这两者,则您必须将其提升为此类(例如,通过为每个节点调用setPriority并使用private的值),或者您必须提供一个索引来提供按值列出的数据列表(例如,具有所有非私有待办事项名称的节点)。请参阅firebase.com/blog/2013-04-12-denormalizing-is-normal.html、firebase.com/blog/2013-10-01-queries-part-one.html 和 firebase.com/blog/2014-01-02-queries-part-two.html -
谢谢你的回答,我明白了。
-
嗨@Denis,我下面的解决方案应该适合你。我将您的 JSON 导入 Firebase 进行检查。不知道为什么没有人提到这一点。如果您能为未来登陆这里的人(比如我)更新答案,那就太好了。
-
也许 .orderByChild 在 2014 年不可用,但它肯定在 2020 年可用,并且可以正常工作。谢谢马特!
标签: json firebase angularfire