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