当前位置: 首页 > 知识库问答 >
问题:

如何使用包含字符串的数组获取文档?云火库

支劲
2023-03-14

所以我在网上找遍了所有地方,但我似乎不知道如何让它发挥作用。

我试图实现的是找到所有在其设备下拥有相同设备的用户。这是Firest数据库的结构:数据库映像

因此,Firebase最近发布了其Javascript库的5.3.0版,在其发行说明中指出:

添加了“array contains”查询运算符以用于。where()查找数组字段包含特定元素的文档。

Firebase Javascript发行说明

我试图在中使用这个“数组包含”。但是我没有成功。这是我的代码:admin。firestore()。集合(“用户”)。其中(“devices”,“array-contains”,id)//我从另一个地方获得id,我知道id是有效的

这是我从firebase函数日志中得到的错误:

未处理的错误:参数“opStr”不是有效的字段比较。操作员必须是下列人员之一“

以下是我对package.json的依赖:

"dependencies": {
"@google-cloud/firestore": "^0.15.4",
"firebase-admin": "~5.13.0",
"firebase-functions": "^2.0.2"
}

如果有人能帮助我,并向我展示一个如何做到这一点的例子,我将不胜感激。谢谢你。

共有3个答案

冯阳华
2023-03-14

正如Doug和Jeremy myW所提到的,此功能未在adminSDK上实现。您可以通过将设备数组转换为与用户集合相同级别的集合来重组数据库。该集合中的每个文档都将包含设备号和用户的id。然后,您将能够查询所需的信息:

const ids = admin.firestore().collection("devices").where("number",'==', id).select("id").get();
ids.forEach(id =>{
    admin.firestore().collection("users").doc(id)...
});

如果child的child包含一个值,您可以从Frank van Puffelen对Firebase查询的回答中获得更多想法

解晟
2023-03-14

Doug已经在他的评论中暗示了答案——您使用的adminSDK还不支持array-包含。adminSDK与JavaScriptSDK不同...这肯定会令人困惑,因为您使用JS语言来使用adminSDK。这个发行说明页面很好地证明了它们是两件不同的事情。

  • JavaScriptSDK用于前端。
  • 管理SDK用于后端(通常是FB云功能)。

不幸的是,没有一种干净的方法可以在后端完成您想要的任务。如果你在前端做这件事,你就可以使用JavaScript SDK团队刚刚推出的方便的数组包含的功能。如果您必须在后端执行,我想不出任何方法,只能痛苦地查询整个过程并循环使用这些值。

有几种方法可以替代这种恶劣的做法:

>

  • 如果可以,请将该查询移动到前端,并利用JS-SDK新的array-包含特性。

    重新构造数据库以避免使用阵列。

    (不是一个严肃的选项)等待adminSDK团队实现此功能。

  • 郎宏浚
    2023-03-14

    Firebase管理节点6.0.0版-2018年8月9日。js SDK具有数组包含功能。

     类似资料:
    • 嗨,我有一个JSON对象: 现在我要访问之后的字符串(是数组值里面的一种键,我得到的数据是这样格式化的) 我不能确定它是数组中的第一个元素,只是它以“key” Xpath表达式的字符串结果最好是,而不是单引号或双引号 1.)我试图找到这样的过滤器表达式idContainer[?('213=*')]返回我这个元素 2.)更方便的方法是,我可以对结果进行更多过滤,只返回,但我不知道使用JSON XPa

    • 问题内容: 我的应用程序中有一个奇怪的异常,我想记录它发生的时间,并包括完整的请求字符串(包括参数)。 当我尝试 我得到了请求字符串,但没有得到包含的参数?和&。 例: 我只看到 我可以把整个字符串放在某个地方吗? 问题答案: 参见HttpServletRequest#getQueryString() 如果需要整个字符串,则必须将请求url和查询字符串附加在一起,因为没有方法可以获取整个字符串。

    • 当我使用opencsv读取csv文件时,它在字符串末尾遇到\时无法正常工作。它使字符串的"部分,而不是'\',因为我想。我想一定有什么方法可以添加另一个\,让它转义\字符?无需手动编辑csv文件。我找过了,但什么也没找到。 为了澄清我的问题,看起来是这样的: csv文件 我的代码看起来像这样(不是真的,但它显示了我的问题): 我想把它解析成一个String[],每行有4个元素,但是最后一行只解析成

    • 问题内容: 当我使用opencsv读取csv文件时,在字符串末尾遇到“ \”时,它无法正常工作。它使字符串的一部分成为“”,而不是我想要的“ \”。我猜必须使用某种方法来添加另一个“ \”以使其转义为“ \”字符吗?而 无需 手动编辑csv文件。我已搜索但未找到任何内容。 为了澄清我的问题,它看起来像这样: CSV文件 我的代码看起来像这样(不是真的,但是它显示了我的问题): 我希望将此解析为每行

    • 我有一个带有字符串的txt文件。我想通过文件获取包含文件中所有行的字符串数组。list(path.get(“path”))方法。 我试图使用toArray(),但它返回指向“path”目录中文件的路径数组 如何使用文件获取它。列表(路径。获取(“路径”))(这是必需的)?我有类似的东西

    • 本文向大家介绍如何在Python中获取文档字符串?,包括了如何在Python中获取文档字符串?的使用技巧和注意事项,需要的朋友参考一下 文档字符串是文档字符串,它是字符串文字,它出现在类,模块,函数或方法定义中,并被写为第一条语句。 Doc字符串有两种类型: 单行文档字符串 多行文档字符串 这些主要用于DataScience  /机器 学习 编程中。 单行文档字符串 这种类型的Doc字符串适合一行