next.js 查询DB以从数组的数组中获取值[重复]

xa9qqrwz  于 2023-03-29  发布在  其他
关注(0)|答案(1)|浏览(111)

此问题在此处已有答案

Firestore - query where filter of object in array field(1个答案)
Firestore array-contains-any is not working properly(1个答案)
Firestore: How to query data from a map of an array(4个答案)
4天前关闭。
这篇文章是4天前编辑并提交审查的。
我的数据库是这样的:

我尝试例如“Ricardo Meireles”与以下代码:

const getTarefasFuncionario = async () => {
    setTarefasFuncionario([]);

    const q = query(
      collection(db, "tarefas"),
      where("funcionarios", "array-contains", {
        photoURL: currentUser.photoURL,
        value: currentUser.displayName,
      })
    );

    const querySnapshot = await getDocs(q);

    const tarefas = [];
    querySnapshot.forEach((doc) => {
      tarefas.push({ ...doc.data() });
      console.log(doc.data());
    });

    tarefas.forEach((tarefa) => {
      const data = tarefa.dia.toDate();
      const options = { day: "2-digit", month: "2-digit", year: "numeric" };
      tarefa.dia = data.toLocaleDateString("pt-BR", options);
    });

    setTarefasFuncionario(tarefas);
  };

但它没有得到任何东西,我试图使用这样的firebase查询系统:

但它也没有工作,我做错了什么?
我期待一个“tarefas”数组,它包含用户作为“funcionario”

avwztpqn

avwztpqn1#

array-contains操作在数组中查找与您指定的值完全匹配的项。因此,要匹配数组中的项,您需要指定值和照片URL。没有操作符可以对数组项进行部分匹配。
常见的解决方法是添加一个 additional 数组字段,其中 just 为您要搜索的值,例如。

funcionarioNames: ["Ricardo Meireles", "cristano"]

有了这个额外的字段,您现在可以在funcionarioNames上执行array-contains
另见:

  • Firestore -查询数组字段中对象的过滤器
  • Firestore array-contains-any不能正常工作
  • Firestore:如何从数组的Map中查询数据

相关问题