- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过其中的成员捕获每个项目——我创建了一个示例数据结构,尽管实际结构要大得多(因为重组数据库很困难)。
这是我的查询:
var ref = new Firebase(FBURL + '/chat/meta/project');
var email = 'kerry@email.com';
ref
.orderByChild("email")
.equalTo(email)
.on("child_added", function(snapshot) {
console.log(snapshot.val());
}
);
重要的是要注意,如果我删除它返回所有“项目”的 .equalTo(email)
,而它应该只返回其中的 2 个。
这是 Firebase 中的数据:
{
"chat" : {
"meta" : {
"project" : {
"-KAgjWOxjk80HIbNr68M" : {
"name" : "Gman Branding",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-10-10T21:33:25.170Z",
"member" : {
"-KAgkD-2GVESwNwKP3fA" : {
"email" : "abc@gman.com"
},
"-KAgkP3M4nug9Bjn-vY6" : {
"email" : "def@gman.com"
},
"-KAgkP3OF0sUgc9x9p37" : {
"email" : "ghi@gman.com"
},
"-KAgkaMyEOiXft6o-HbO" : {
"email" : "kerry@email.com"
}
}
},
"-KAgl9xlPDU5T4072FgE" : {
"-KAglqH9pxkhgC84_kAl" : {
"name" : "YuDog",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-10-10T21:41:31.172Z"
},
"name" : "billing test 1",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-02-25T23:18:55.626Z",
"dateNotifyUnread" : "2016-01-25T23:23:55.626Z",
"member" : {
"-KAglNsswyk66qUZNrTU" : {
"email" : "kerry@email.com"
}
}
},
"-KAgltmLk2oOYhEDfwRL" : {
"-KAgm1Jt5q53gzLm1GIh" : {
"name" : "YuDog",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-10-10T21:41:31.172Z"
},
"name" : "YuDog",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-10-10T21:41:31.172Z",
"member" : {
"-KAgm1Jvss9AMZa1qDb7" : {
"email" : "joe@yudog.com"
}
}
},
"-KAgluTcE_2dv00XDm1L" : {
"-KAgm6ENmkpDiDG2lqZ4" : {
"name" : "YuDog Landing Page",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-10-10T21:41:31.172Z"
},
"-KAgmBptbeInutRzNinm" : {
"name" : "YuDog Landing Page",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-10-10T21:41:31.172Z"
},
"name" : "YuDog Landing Page",
"url" : "http://localhost:3000/project/abc123fasd123cc/...",
"date" : "2015-10-10T21:41:31.172Z",
"member" : {
"-KAgm6EQcvQg3oP-OnIF" : {
"email" : "joe@yudog.com"
},
"-KAgmBpwoxPYGXS9fLZ9" : {
"email" : "joe@yudog.com"
}
}
}
}
}
}
}
我查看了 SO 上的 8-10 个其他链接,但没有找到任何解决此问题的链接。
最佳答案
解决方案是创建符合您需求的数据结构。在这种情况下,您希望根据用户的电子邮件地址查找用户的项目。所以我们将添加一个包含此映射的节点:
"projects_by_email": {
"kerry@email,com": {
"-KAgjWOxjk80HIbNr68M": true,
"-KAgl9xlPDU5T4072FgE": true
},
"abc@gman,com": {
"-KAgjWOxjk80HIbNr68M": true
}
...
}
这称为对数据进行反规范化,尽管我经常将它们视为倒排索引。我可能会通过 uid 保留项目,但结构是相同的。
使用这样的结构,您可以通过简单的直接查找获得电子邮件的项目列表:
var ref = new Firebase(FBURL);
var email = 'kerry@email.com';
ref.child('projects_by_email')
.child(email)
.on("child_added", function(snapshot) {
console.log(snapshot.key());
}
);
或者如果您还想自己“加入”项目:
var ref = new Firebase(FBURL);
var email = 'kerry@email.com';
ref.child('projects_by_email')
.child(email)
.on("child_added", function(snapshot) {
ref.child('project').child(snapshot.key()).once('value', function(projectSnapshot) {
console.log(projectSnapshot.val());
});
}
);
这种类型的反规范化是 NoSQL 数据建模的正常部分。重复可能会让人觉得很浪费,但这是 NoSQL 解决方案扩展性如此之好的部分原因:上面的代码都没有要求数据库考虑所有项目/所有用户。都是直接访问正确的节点,扩展性非常好。所以我们牺牲存储空间来获得改进的性能/可扩展性;典型的空间与时间权衡。
关于javascript - Firebase - 深度查询 orderByChild 与 equalTo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35446695/
当我尝试在 Google 上搜索此错误时,我什么也没找到:“ Uncaught Error :Query.equalTo:之前调用过 startAt() 或 equalTo()!”。 (一个没有说明什
当我试图通过电子邮件或电话号码查找记录时,我一直在使用下面的两个代码,有时第一个代码工作正常有时不起作用,第二个代码也一样。 下面的代码和什么时候应该使用“equalTo”或“startAt and
这是我目前用来尝试验证表单的方法。当我在表单中未输入任何值的情况下按“提交”时,我会按预期收到每个输入的错误消息。但是,无论我在 newpassword2 或 newemail2 中输入什么,它们都不
在我的网络应用程序中,当用户登录时,他们应该看到他们制作的所有文档。然而,当我测试我的申请时,我看到了所有文件,包括我没有制作的文件。我相信这是因为我没有正确使用 Parse.query.equalT
我想使用 validate.js 验证我的表单并匹配密码。我编写了以下代码: $(document).ready(function () { $("#signup-form").validat
我在使用 Firebase 时遇到问题;我正在尝试用 javascript 检索我的所有帖子,这些帖子以正确的语言“发布”并按发布日期排序。 我的 Firebase 数据库是这样的: { posts:
我有以下 PHPUnit 测试用例: $mailer = $this->getMockBuilder(MailerInterface::class)->getMock(); $simp
我正在使用简单模式打开注册表单。我正在尝试验证密码并确认密码,但密码字段始终为空,有什么想法吗? var validator = $("#registrationForm").vali
使用 jquery 验证插件,我使用规则 equalTo 来验证字段,如下所示: $('#booking').validate({ ignoreTitle: true, rules: { pa
我的查询应该搜索解析类并返回所有 PFObject(如果它们包含标签数组中的字符串)。没有 whereKey: equalTo: 代码可以工作并且所有对象都会显示,但没有它则什么也不显示。 impor
当我在没有任何查询的情况下从数据库中获取所有数据时,我从数据库中获取了最后的条目(生成的键就是以这种方式工作的)。像这样: var ref = firebase.database().ref('myO
我在 firebase 中的数据如下所示。 items { item1: { field1: value1 field2: value2 } item2: {
我在 PHPUnit 中遇到问题,我想在比较日期时在 equalTo 方法中使用 delta 参数。假设我想将相差不超过 10 秒的日期视为相等的日期。 $some_delta 的适当值是多少? 10
我正在使用以下代码使用放心库进行服务调用,您能帮我解决构建问题吗?查找函数 "equalTo" 来验证响应数据时出现问题。 请参阅下面的错误: 这是我的代码: @Test public void te
我正在使用此查询来验证我的 Firebase 上是否存在数据(使用 AngularFire2) let aux = this.afData.list("/drivers", { query: { or
我正在使用jQuery Validate plugin在我的 Grails 应用程序中,以下是来自 GSP 的验证代码: $(document).ready(function() {
我正在尝试更改列表中的某些项目 - 不是所有项目,因为这是一个巨大的列表,可以由很多人修改。 const ref = firebase.database() .
我正在做一个非常简单的验证,检查两个字段是否相等。不幸的是,它似乎不起作用(当它应该返回 true 时返回 false)。 这是 jQuery(#profSet 是主要形式):
$('#reg_form').validate({ onkeyup: false, errorClass: 'error',
var data = [ { Id: 1, key: 'text', text: 'Hide', language: 'write', translation: 'q
我是一名优秀的程序员,十分优秀!