热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript查询两个条件之间的Firebase数据库

我想知道是否有可能从我的Firebase数据库返回一个值列表,其中每个元素都满足两个条件.例如,如果我的数据库如下所示:MYAPP|_______________items|

我想知道是否有可能从我的Firebase数据库返回一个值列表,其中每个元素都满足两个条件.

例如,如果我的数据库如下所示:

MYAPP
|_______________items
| |_____OshwYF72Jhd9bUw56W7d
| | |
| | |__item_name:"plank_5"
| | |__length:"120"
| | |__width:"50"
| |
| |_____KbHy4293dYgVtT9pdoW
| |_____PS8tgw53SnO892Jhweh
| |_____Gicuwy8r23ndoijdakr
|
|___customers

而且我想在数据库中查询长度在100-150之间且宽度在30-70之间的每个项目的item_name,是否可以通过Firebase查询来实现?

我在这里已经阅读了答案:Query based on multiple where clauses in firebase,但是它不能处理多个between / range子句,这是我在上述情况下需要的.

我在另一个答案中看到了该插件:https://github.com/davideast/Querybase,但是where子句似乎没有取值范围.例如:

const queriedDbRef = querybaseRef
.where({
length: (between 100-150),
width: (between 30-70)
});

这样的查询是否可能?还是我必须获取所有匹配一个条件的项目,然后使用Javascript在客户端应用第二个条件?

解决方法:

Firebase数据库查询只能对一个属性进行排序/过滤.这是一个硬性限制,在不久的将来不太可能改变.

在某些情况下,可以将多个值组合到单个属性中,例如您链接或在QueryBase中的答案.但是,在您发现的那些情况下,您只能对其中一个值(即最后一个)执行相对/范围查询.

(据我所知)有人曾经实施过多值范围查询的唯一情况是在GeoFire中,我们将位置的经度和纬度合并为一个所谓的GeoHash.我强烈建议您阅读有关地理哈希的更多信息,因为他们这样做一些非常独特的东西:将两个数字值组合成一个字符串值,该字符串值允许对其数字分量进行排序和过滤.

通过查看您想要组合的两个值(长度和宽度),可能可以从它们创建一个相似的复合字符串.但要求您找到一种方法,以结合用例的两个值.我能想到的最简单的方法就是存储区域,所以长*宽:

{
items: {
"OshwYF72Jhd9bUw56W7d": {
item_name:"plank_5",
length: 120, // you store length and width as strings, please fix that
width: 50,
area: 6000
}
}
}

这样,您可以过滤面积在3000(100×30)到10500(70×150)之间的项目:

var query = ref.orderBy("area").startAt(3000).endAt(10500);

此查询将匹配太多项目,因此您将不得不在客户端执行一些额外的过滤操作以拒绝不匹配(Geofire执行相同的操作):

query.on("child_added", function(snapshot) {
var item = snapshot.val();
if (item.length >= 100 && item.length <= 150
&& item.width >= 30 && item.width <= 70) {
// TODO: do something with the item
}
});


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • 我正在尝试将Firebase添加到涉及添加以下内容的现有应用程序中:classpath'com.googl ... [详细]
  • NB:我看到我的草稿中已有将近两年的教程,所以我决定将其发布。在本教程中,我将构建一个简单的reactJs应用程序,该应用程 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了当应用程序处于后台状态时,FCM多次推送通知无法正常工作相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Firebase使用电子邮件,密码,显示名 ... [详细]
  • MAKER:Technovation/译:趣无尽Cherry(转载请注明出处)本次介绍的是一个由树莓派驱动的物联网滴灌系统,比往期《用树莓 ... [详细]
author-avatar
我是风一样的我们
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有