今回は空文字/Null/フィールドなし/undefinedに関する検索を行います。
サンプルデータ
次のようなデータをcol1コレクションに設定します。
[Mongoシェル]
1 | > db.col1.insertOne({_id:1, name:""}) |
上記データを一覧にまとめると下記のようになります。
_id | name |
---|---|
1 | "" |
2 | null |
3 | (nameフィールドなし) |
4 | undefined |
空文字/Null/フィールドなし/undefinedの説明
各データの説明は以下の通りです。
- 空文字
0バイトの文字列です。空文字はString型として扱われます。 - null
nullはNull型として扱われます。 - フィールドなし
MongoDBではドキュメントごとにフィールドが異なります。
そのためフィールド自体がないということがありえます。 - undefined
JavaScriptではundefinedという型があります。
値がないけれどもnullでもないという特殊な型です。
Null検索
Null検索を行います。
[Mongoシェル]
1 | > db.col1.find({name:null}) |
nameフィールドがnullのドキュメントだけではなく、nameフィールドのないドキュメントとundedinedのドキュメントも検索対象となるので注意が必要です。
フィールドの存在有無検索($exists)
フィールドの存在有無を検索する$existsを使って検索してみます。
[Mongoシェル]
1 | > db.col1.find({name:{$exists:false}}) |
$existsにfalseを指定すると、そのフィールドが存在しないドキュメントだけが検索されます。
データ型指定検索($type)
$typeにデータ型“null”を指定して検索を行います。
[Mongoシェル]
1 | > db.col1.find({name:{$type:"null"}}) |
nameフィールドがnullのドキュメントだけが検索対象となります。
String型であるかどうかを調べるためには“string”、配列型かどうかを調べるためには“array”を指定します。
その他のデータ型は下記の公式ページをご参照下さい。
MongoDB $typeのデータ型 - https://docs.mongodb.com/manual/reference/operator/query/type/
まとめ
上記の検索結果を一覧にまとめると下記のようになります。
“〇”が検索対象になるドキュメントで、”—“が検索対象にならないドキュメントです。
データ型 | Null検索 | $exists(false)検索 | $type("null")検索 |
---|---|---|---|
空文字 | --- | --- | --- |
Null型 | 〇 | --- | 〇 |
フィールドなし | 〇 | 〇 | --- |
undefined | 〇 | --- | -- |
Pythonで操作
上記の検索をPythonで行うと、次のようになります。
[ソースコード]
1 | from pymongo import MongoClient |
次回は配列、オブジェクトの値で検索を行います。