FireStore查询如何从数据库中查询数组

FireStore query how to query arrays from the database

我正在尝试查询数据库以获取某个文档,该文档包含一个数组,该数组同时具有 userid 和 id

const userChatQuery = query(collectionGroup(db, userchat), where(user, 'array-contains', [userId, id]));

我想检索包含包含这两个 id 字符串的数组的文档,无论顺序如何,但它们必须同时包含这两个字符串。

最好的解决方法是什么?

使用单个查询无法实现您所描述的内容。

首先,array-contains 只接受单个值作为参数,而不接受要查找的值数组。其目的是找到匹配文档,其中一个值是指定数组字段的一个元素。

如果您可以假设数组只能有两个值,并且这些值只能以相同的顺序出现,那么您或许能够在给定您要查找的确切数组的情况下执行简单的相等性过滤器.只需向查询提供您要查找的确切数组。

如果您不能做出这些假设,您可以尝试两个 array-contains 查询,一个用于每个 ID 字符串,然后检查两个查询的结果以找出它们重叠的地方。

但是,老实说,您最好重构数据库,完全不使用数组。如果您有具有明确目的的值,则它们根本不应该在数组中。它们应该是您可以正常过滤的单独字段。您正在为这些数据使用数组对我来说似乎真的很奇怪。您现在拥有的数据建模根本不能满足您的查询要求,这是使用 NoSQL 类型数据库时的主要问题。使用 NoSQL,您通常会先弄清楚要如何查询数据,然后对数据建模以满足这些要求。