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

findMany()

特定の条件に合致したすべての行を取り出したい場合に利用します。

使用できるキー

キー名内容省略備考
where取得条件の指定書かない場合は全ての行を取得します
select取得列の表示設定
orderByソート設定指定する列が 1 つの場合、配列の省略が可能です
take取得数の設定
skipスキップ数の設定
distinct重複削除の設定指定する列が 1 つの場合、配列の省略が可能です

説明例用のシート

説明用シート

説明

上記例から以下の条件の行を取り出したいとします。

  • pref => Tokyo

この場合以下のコードとなります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
pref: "Tokyo",
},
});

戻り値は以下の形式です。

[
{ name: "sato", age: 31, pref: "Tokyo", postNumber: "160-0023" },
{ name: "endo", age: 55, pref: "Tokyo", postNumber: "160-0023" },
];

複数の条件を指定したい場合は以下のコードとなります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
pref: "Tokyo",
年齢: 31,
},
});

演算子・部分一致

以上・以下や部分一致等の条件付き検索も可能です。例えば以下の条件で行を取り出したいとします。

  • age => 20 以上
  • age => 30 以下

この場合以下のコードとなります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
age: {
gte: 20,
lte: 30,
},
},
});

条件付き検索に関連するキーは以下の通りです。

キー名役割
equals同値かeauals: 20
not同値ではないかnot: 20
in指定したリストの中にあるかin: [20, 21, 22]
notIn指定したリストの中にないかnotIn: [23, 24. 25]
lt未満lt: 30
lte以下lte: 30
gt超過gt: 20
gte以上gte: 20
contains対象データの中に指定した文字列が含まれているかcontains: "AB"
startsWith対象データが指定した文字列から始まっているかstartsWith: "AB"
endsWith対象データが指定した文字列で終わっているかendsWith: "YZ"

AND, OR, NOT

複数条件での検索も可能です。

AND

例えば以下の条件で行を取り出したいとします。

  • age => 22
  • pref => Ibaraki

AND を利用して検索する場合以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
AND: [
{
age: 22,
},
{
pref: "Ibaraki",
},
],
},
});

OR

例えば以下の条件で行を取り出したいとします。

  • age => 22 または 40

OR を利用して検索する場合以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
OR: [
{
age: 22,
},
{
age: 40,
},
],
},
});

NOT

例えば以下の条件で行を取り出したいとします。

  • age => 22 ではない
  • age => 40 ではない

NOT を利用して検索する場合以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
NOT: [
{
age: 22,
},
{
age: 40,
},
],
},
});

AND, OR, NOT の重ねがけ

例えば AND の下に OR や NOT を入れることができます。この入れ子構造は GAS のコールスタックが許す限り無限に可能です。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
NOT: {
AND: [
{
name: "akahoshi",
},
{
age: 22,
},
],
},
},
});

select

戻り値に返るデータを制限することができます。

例えばageprefのみ取得したい場合は以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
age: {
gte: 20,
},
},
select: {
name: true,
pref: true,
},
});

戻り値は以下のようになります。

[
{ name: "akahoshi", pref: "Ibaraki" },
{ name: "sato", pref: "Tokyo" },
{ name: "suzuki", pref: "Osaka" },
{ name: "yamamoto", pref: "Aichi" },
{ name: "ono", pref: "Shiga" },
{ name: "kudo", pref: "Kyoto" },
{ name: "kondo", pref: "Tottori" },
{ name: "endo", pref: "Tokyo" },
{ name: "murakami", pref: "Fukuoka" },
];

orderBy

取得した行をソートすることができます。

例えばageで昇順でソートする場合は以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
age: {
gte: 20,
},
},
orderBy: {
age: "asc",
},
});

指定できるデータは以下の通りです。

キー名意味
asc昇順
desc降順

また、複数ソートの条件を指定することもでき、例えば

  • ageで昇順でソート
  • ageの値が同じ行があればその部分はnameの昇順でソート

といったことを行いたい場合コードは以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
age: {
gte: 20,
},
},
orderBy: [{ age: "asc" }, { name: "asc" }],
});

※ソートの優先順位はインデックス番号の若い順となります。

take

取得数を指定できます。取得数はシートの上の行から順となります。

例えば条件に合致した行の中から上から 2 行を取得したい場合以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
age: {
gte: 20,
},
},
take: 2,
});

skip

取得した行の中から特定行をスキップできます。

例えば条件に合致した行の中から上 1 つ目を省きたい場合、コードは以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
age: {
gte: 20,
},
},
skip: 1,
});

distinct

列名を指定し、もし値が被っている場合その行を省略できます。被っている場合は上の行のデータが優先されます。

例えばageの被りを省略する場合、コードは以下のようになります。

const gassma = new Gassma.GassmaClient();

// gassma.sheets.{{TARGET_SHEET_NAME}}.findMany
const result = gassma.sheets.sheet1.findMany({
where: {
age: {
gte: 20,
},
},
distinct: ["age"],
});