Airtable有时会返回结果,有时却不会返回结果

时间:2019-03-11 21:55:35

标签: node.js airtable

我正在使用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的重复记录。我是在做错什么,还是有一些我不知道的问题?

1 个答案:

答案 0 :(得分:1)

我设法解决了这个问题。我已从查询中删除视图,现在一切正常。如果不包含任何视图,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;
},