Airtable 有时 return 有结果,有时没有

Airtable sometimes return results and sometimes not

我正在使用 Node.js 库与 AirTable 通信,official js library。我遇到 filterByFormula 的问题。有时,当我尝试从 AirTable 中查找记录时,我没有得到结果,尽管我很确定应该有一些结果。我的逻辑是,如果我在 AirTable 中找不到记录,我会创建一个新记录。如果找到它,我将更新现有的。此逻辑导致输入两次相同条目的问题。

这是我的查询:

getReservationByID: async (externalID) {
    let reservations = await calendarBase('Reservations').select({
      view: 'Main View',
      filterByFormula: `{External ID} = \"${externalID}\"`,
      maxRecords: 1,
    }).all();

    return (reservations.length > 0) ? reservations[0] : null;
},

而这个函数是这样使用的:

let oldReservation = await getReservationByID(reservation.id);
if (!oldReservation) {
  createNewReservation(reservation);
} else {
  updateReservation(reservation);
}

如您所见,我必须从 AirTable 获取记录(如果存在),但有时 AirTable 不会返回具有给定 ID 的现有记录,然后我会得到具有相同外部 ID 的副本。我是做错了什么还是有一些我不知道的问题?

我已经设法解决了这个问题。我已经从查询中删除了视图,现在一切正常。如果没有包含视图,Airtable 将搜索 table 中与您的公式匹配的所有记录。如果您指定视图,Airtable 会将其搜索限制在该视图,然后查找与您的公式匹配的所有记录。如果您对放入 select 的视图有过滤器,在我的例子中是 'Main View',那么您可能从脚本中隐藏了某些记录。

我的新查询如下所示:

getReservationByID: async (externalID) {
    const reservations = await calendarBase('Reservations').select({
      filterByFormula: `{External ID} = \"${externalID}\"`,
      maxRecords: 1,
    }).all();

    return (reservations.length > 0) ? reservations[0] : null;
},