ニフクラ mobile backend(mBaaS)お役立ちブログ

スマホアプリ開発にニフクラ mobile backend(mBaaS)。アプリ開発に役立つ情報をおとどけ!

データストアを複雑な条件で検索する

f:id:mbaasdevrel:20180809155722p:plain

データストアでは多数のオペランド(検索条件)を用意しています。しかし多くの方が「同じ」「以上」「以下」「より大きい」「より小さい」くらいしか使っていないのではないでしょうか。

そこで今回はカラムをオブジェクト型にした時の複雑な条件設定方法について紹介します。

値が一致するものを検索する

例えば hash というカラムの中に次のような値を入れたとします。

{
  "a":"b",
  "c":"d"
}

この時、以下のような検索でデータを取り出せます。

ObjectClass
.equalTo('hash.a', 'b')
  .fetchAll()
  .then(results => {
    console.log(results)
  })

カラム名 + キー名で指定できるのです。この特性を使うと、あるポインターのオブジェクトが指定されているデータと言った絞り込みもできます。

ObjectClass
  .equalTo('hash.__type', 'Pointer')
  .equalTo('hash.objectId', 'AAAAAAA')
  .equalTo('hash.className', 'OtherClass')
  .fetchAll()
  .then(results => {
    console.log(results)
  })

オブジェクト内の配列で検索する

次にカラム内のデータが次のような値だったとします。

{
  "a":[
    1,2,3
  ]
}

このような時に配列の値を検索したいことがあるでしょう。その場合は以下のようにします。

ObjectClass
.equalTo('hash.a.0', 1)
  .fetchAll()
  .then(results => {
    console.log(results)
  })

配列の添字を指定すると、その値だけが取り出せます。その上でイコールや以上、以下、より大きい、より小さいといった指定ができます。

配列の値で検索

オブジェクトの中にある配列の値で検索も可能です。

ObjectClass
  .inArray('hash.a', 4)
  .fetchAll()
  .then(results => {
    console.log(results)
  })

まとめ

データストアの中には数値や文字列、日付や位置情報などの情報や配列、オブジェクトといったデータを入れることもできます。柔軟にデータが入れられる一方で、検索する方法がなければ利用するのも難しいでしょう。

今回紹介した方法を使えばオブジェクトとしてデータを保存するのも難しくなく感じてもらえるはずです。ぜひ利用してください。

中津川 篤司

中津川 篤司

NCMBエヴァンジェリスト。プログラマ、エンジニアとしていくつかの企業で働き、28歳のときに独立。 2004年、まだ情報が少なかったオープンソースソフトの技術ブログ「MOONGIFT」を開設し、毎日情報を発信している。2013年に法人化、ビジネスとエンジニアを結ぶDXエージェンシー「DevRel」活動をスタート。