メインコンテンツまでスキップ

fields(列同士の比較)

where 条件内で、固定値ではなく同じ行の別の列の値と比較したい場合に fields プロパティを利用します。

基本的な使い方

各シートコントローラーの fields プロパティから FieldRef を取得し、フィルタ条件の値として渡します。

const gassma = new Gassma.GassmaClient();
const userSheet = gassma.Users;

// firstName と lastName が同じ値のユーザーを検索
const result = userSheet.findMany({
where: {
firstName: { equals: userSheet.fields.lastName },
},
});

上記の例では、各行ごとに firstNamelastName の値を比較し、一致する行のみを返します。

使用できる演算子

FieldRef は以下の演算子で使用できます。

演算子動作
equals同値か{ equals: sheet.fields.otherColumn }
lt未満{ lt: sheet.fields.maxValue }
lte以下{ lte: sheet.fields.maxValue }
gt超過{ gt: sheet.fields.minValue }
gte以上{ gte: sheet.fields.minValue }
contains文字列を含むか{ contains: sheet.fields.keyword }
startsWith文字列で始まるか{ startsWith: sheet.fields.prefix }
endsWith文字列で終わるか{ endsWith: sheet.fields.suffix }
注意

notinnotIn では FieldRef は使用できません。

数値の比較

// age が maxAge より小さいユーザーを検索
const result = userSheet.findMany({
where: {
age: { lt: userSheet.fields.maxAge },
},
});

文字列の比較

// fullName に firstName の値を含むレコードを検索
const result = userSheet.findMany({
where: {
fullName: { contains: userSheet.fields.firstName },
},
});

mode: "insensitive" との組み合わせ

FieldRefmode: "insensitive" と組み合わせて大文字小文字を区別しない比較ができます。

const result = userSheet.findMany({
where: {
firstName: {
equals: userSheet.fields.lastName,
mode: "insensitive",
},
},
});

AND / OR / NOT での使用

論理演算子の中でも FieldRef を使用できます。

const result = userSheet.findMany({
where: {
OR: [
{ firstName: { equals: userSheet.fields.lastName } },
{ age: { gt: userSheet.fields.minAge } },
],
},
});

使用できるメソッド

fieldswhere を使用するすべてのメソッドで利用可能です。

  • findMany / findFirst / findFirstOrThrow
  • update / updateMany / updateManyAndReturn
  • delete / deleteMany
  • upsert
  • count / aggregate / groupBy

参照先の列が存在しない場合

FieldRef で指定した列名がシートに存在しない場合、その条件はマッチしません(エラーにはなりません)。