1

我正在使用 Node.js 库与官方 js 库AirTable 进行通信。我遇到了问题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 获取记录,但有时 AirTable 没有返回具有给定 ID 的现有记录,然后我得到具有相同外部 ID 的重复记录。我做错了什么还是有一些我不知道的问题?

4

1 回答 1

2

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

我的新查询如下所示:

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

    return (reservations.length > 0) ? reservations[0] : null;
},
于 2019-03-12T21:45:18.333 回答