首页 > 解决方案 > 您可以使用带有集合而不是数组/列表的 response.json 吗?

问题描述

我正在尝试从 Firestore 获取数据。因为我试图根据日期范围(fromDate 和 toDate)进行检索,所以我决定使用两个单独的查询。第一个在 ToDate 之前举行婚礼,第二个在 fromDate 之后举行婚礼。然后我想在 SET 中添加两者的结果,以避免重复。但是当我使用response.json 并传入resultSet 时,它是空的。如果我将 resultsSet 更改为列表,它会吐出我正在寻找的数据。

这是我现在拥有的代码:

    exports.getWeddingsBasedOnDateRange = (request, response) => {
  const weddingSearchParams = {
    fromDate: new Date(request.body.fromDate),
    toDate: new Date(request.body.toDate),
    guests: request.body.guests
  };

  let weddingsBeforeToDate = [];
  let weddingsAfterFromDate = [];

  db.collection("weddings")
    .where("toDate", "<=", weddingSearchParams.toDate)
    .where("guests", "==", weddingSearchParams.guests)
    .get()
    .then(data => {
      data.forEach(doc => {
        weddingsBeforeToDate.push({
          ...doc.data(),
          weddingId: doc.id
        });
      });
      db.collection("weddings")
        .where("fromDate", ">=", weddingSearchParams.fromDate)
        .where("guests", "==", weddingSearchParams.guests)
        .get()
        .then(data => {
          data.forEach(doc => {
            weddingsAfterFromDate.push({
              ...doc.data(),
              weddingId: doc.id
            });
          });
          let resultSet = new Set();
          resultSet.add(weddingsBeforeToDate);
          resultSet.add(weddingsAfterFromDate);
          return response.json(resultSet);
        })
        .catch(err => console.error(err));
    })
    .catch(err => console.error(err));
};

我在网上找不到任何关于 set 与 response.json 的兼容性的信息,但我不明白为什么它不能接受 Set。

任何帮助将不胜感激!

标签: node.jsjsonlistgoogle-cloud-firestoreset

解决方案


您无法将 JavaScript 转换Set为 JSON 格式,因为存储在集合中的数据不存储为属性。您可以对以下任何一项进行编码:

JSON.stringify([...s]);
JSON.stringify([...s.keys()]);
JSON.stringify([...s.values()]);
JSON.stringify(Array.from(s));
JSON.stringify(Array.from(s.keys()));
JSON.stringify(Array.from(s.values()));

这是以下内容的直接副本:

JSON字符串化一个集合


推荐阅读