分享
三行代码  ›  专栏  ›  技术社区  ›  poseidon23

Firestore-根据技能获取用户

  •  0
  • poseidon23  · 技术社区  · 3 天前

    我在使用firestore时偶然发现了一个问题,这可能是我对它的了解有限。不确定。不过,我想做的是使用一个查询参数查询我的集合,该参数包含一个字符串,该字符串是一项技能,并返回具有此技能的用户。我故意将所有用户添加到一个数组中,而不是为每个用户创建单独的文档,因为我认为这样应该更有效(如果我错了,请纠正我)。

    以下是我在代码方面所做的尝试:

      const result = await db
        .collection('foo')
        .where(`skills.${q}`, '==', true)
        .get()
        .then(snap => {
          if (snap.empty) {
            console.log('its empty');
          } else {
            const docs = snap.docs.map(doc => doc.data());
            console.log(docs);
          }
      });
    

    q bar baz skills 反对。

    enter image description here

    为了更清楚地了解结构,我还截取了我发布数据的postman: enter image description here

    希望事情足够清楚,提前谢谢你!

    1 回复  |  直到 3 天前
        1
  •  1
  •   Doug Stevenson    3 天前

    用户字段实际上是一个包含两个元素的列表类型字段。因为“0”和“1”,你可以分辨出来。每个列表项都包含一个包含更多字段的映射。

    无法查询Firestore中文档列表元素的各个属性。 如果要查找具有特定技能集的文档,则应使用名为“技能”的顶级列表类型字段,该字段包含要搜索的技能字符串。然后你可以做一个 array-contains-any query 这样地:

      const result = await db
        .collection('foo')
        .where('skills', 'array-contains-any', ['bar', 'baz'])