在Alex的建议下,我已提交了功能请求。Firebase技术支持的回复如下:
目前在Firestore控制台中没有类似于array-contains的查询。我可以代表您提交一个功能请求工单。但是,目前我不能保证任何事情,因此请注意我们博客或版本说明的任何更新。对于地图字段,您可以尝试使用格式:“mapFieldName.keyName”在字段文本框中过滤
所以我们可以通过“mapFieldName.keyName”来查询地图值。我之前不知道这一点。
==
表示等于>
表示在之后>=
表示在之后并包括此值<
表示在之前<=
表示在之前并包括此值whereArrayContains
选项。我建议您为此提交一个功能请求。这对其他开发人员也可能很有用。mini_stores_assigned
是否等于 ministoreid1
,显然它们不相等,因为 mini_stores_assigned
属性是一个数组,而不是字符串,所以您无法比较它们。###按用户筛选博客。
例如,如果您有两个集合(一对多)
/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});