在Firebase控制台中通过数组或Map字段值查询Firestore文档

3

在这里,我想在Firebase控制台中按值“ministoreid1”进行查询。但我无法弄清楚。在这里,我正在尝试在控制台中进行查询,而不是使用代码。


你是否正在尝试在Firestore中的列表中查找特定条目? - Constantin Beer
是的,但是根据字段值。 - Ssubrat Rrudra
然后看下面的答案。那应该符合你的需求。 - Constantin Beer
4个回答

4

在Alex的建议下,我已提交了功能请求。Firebase技术支持的回复如下:

目前在Firestore控制台中没有类似于array-contains的查询。我可以代表您提交一个功能请求工单。但是,目前我不能保证任何事情,因此请注意我们博客或版本说明的任何更新。对于地图字段,您可以尝试使用格式:“mapFieldName.keyName”在字段文本框中过滤

所以我们可以通过“mapFieldName.keyName”来查询地图值。我之前不知道这一点。


你真的帮了我解决问题。我已经找这个功能一小时多了。 - vugar_saleh

2
很抱歉,目前在Firebase控制台中没有办法根据数组中存在的值来过滤您的文档。如您所见,只有以下运算符:

== 表示等于
> 表示在之后
>= 表示在之后并包括此值
< 表示在之前
<= 表示在之前并包括此值

但是,目前还不存在 whereArrayContains 选项。我建议您为此提交一个功能请求。这对其他开发人员也可能很有用。

您在控制台中执行的查询不会返回任何结果,因为您正在检查 mini_stores_assigned 是否等于 ministoreid1,显然它们不相等,因为 mini_stores_assigned 属性是一个数组,而不是字符串,所以您无法比较它们。

1
已提交功能请求。 - Ssubrat Rrudra
很高兴听到这个消息 ;) - Alex Mamo

1
为了将来的使用,Firebase增加了Ssuburat提出的功能请求。现在,您可以根据存在于数组中的值,在Firebase控制台中过滤您的文档。Image here

0

###按用户筛选博客。

例如,如果您有两个集合(一对多)

/users
/blogs

博客和用户有这些方案:

blog: { name,date,user:{myusername:true}}

//注意用户是一个映射或对象,文档博客本身具有ID,您可以在用户文档中使用它,反之亦然。

user:{name,lastname,blogs:{idblog1:true,idblog2:true}} //blogs is a map or object

如果你想通过地图对象进行过滤,可以这样做:

import firebase from "firebase/compat/app";
import { getFirestore } from "firebase/firestore";

const appFirebase = firebase.initializeApp(firebaseConfig);
export const dbFirebase = getFirestore(appFirebase);

const myuser= "myusername"
const q = query(collection(dbFirebase, "blogs"), where(`user.${myuser}`, "==", true));
const blogsSnapshot = await getDocs(q);

blogsSnapshot.forEach((doc) => {

      // doc.data() is never undefined for query doc snapshots
      console.log(doc.id, " => ", doc.data());
    });

console.log({blogsSnapshot}); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接