120
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ついにFirestoreに != クエリが来たので検証してみた

Last updated at Posted at 2020-09-19

JSのClient SDK v7.21.0で、ついにFirestoreに ノットイコール != クエリが来ました🎉🎉🎉 他のSDKにも来るのが楽しみですね!他にも not-inクエリが来ています!

ひとまず!=がどんな動きになるのか気になったので早速試してみました。

import * as firebase from 'firebase'
import 'firebase/firestore'

firebase.initializeApp({
  // your config
})

// 事前にこのデータをFirestoreのusers配下に作成しておく
const list = [
  { name: '1', status: 'a' },
  { name: '2', status: 'b' },
  { name: '3', status: 'c' },
  { name: '4', status: null },
  { name: '5', },
]

const db = firebase.firestore()
const usersRef = db.collection('users')

const result1 = await usersRef.where('status', '!=', 'a').get()
// statusに値が設定されている(nullを除く)ドキュメントの中で、status != aのものが取得される
// result1 = [
//   {
//     "name": "2",
//     "status": "b"
//   },
//   {
//     "name": "3",
//     "status": "c"
//   }
// ]

const result2 = await usersRef.where('status', '!=', null).get()
// statusに値が設定されているドキュメントが取得される
// result2 = [
//   {
//     "name": "1",
//     "status": "a"
//   },
//   {
//     "name": "2",
//     "status": "b"
//   },
//   {
//     "name": "3",
//     "status": "c"
//   }
// ]

const result3 = await usersRef.where('status', '!=', undefined).get()
// thrown FirebaseError: Function Query.where() requires a valid third argument, but it was undefined.

whereで指定したフィールドがnullやそもそも存在しないドキュメントの取り扱いは、もしかしたら想定とはズレるかもしれません。特に元々フィールドが存在しない場合(この例で言うname: 5のもの)は、当然ながらwhereでは取ってくることができないようです。ReleaseNotesに書いてあるとおりでしたね。

!= finds documents where a specified field's value does not equal the specified value. Neither query operator will match documents where the specified field is not present.

よかったらTwitterも見ていってください〜FirebaseやFlutterをはじめとして、サービス開発全般のことをつぶやいてます👇

120
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
120
41

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?