MongoDBでフィールドがNaNのすべてのドキュメントを検索する方法
MongoDBでフィールドがNaNのドキュメントを検索するには
MongoDBで、特定のフィールドにNaN(Not a Number:非数)が格納されているすべてのドキュメントを検索するには、find()メソッドの条件値としてNaNを指定します。基本的な構文は以下の通りです。
db.yourCollectionName.find({ yourFieldName: NaN })
なお、NaNは「0/0」と記述することもできます。これはJavaScriptの数値演算において、0÷0の計算結果がNaNとなるためです。どちらの書き方でも同じ結果が得られます。
サンプルコレクションの作成
まず、動作確認用のコレクションを作成し、いくつかのドキュメントを挿入してみましょう。
> db.nanDemo.insertOne({"Score":0/0});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca251a26304881c5ce84b8a")
}
> db.nanDemo.insertOne({"Score":10/5});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca2520e6304881c5ce84b8b")
}
> db.nanDemo.insertOne({"Score":20/0});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca252156304881c5ce84b8c")
}
> db.nanDemo.insertOne({"Score":0/20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ca2521e6304881c5ce84b8d")
}
ここでは、4種類の異なる演算結果(NaN、通常の数値、Infinity、ゼロ)を意図的に挿入しています。
登録済みドキュメントの確認
find()メソッドを使って、コレクション内のすべてのドキュメントを表示してみます。
> db.nanDemo.find().pretty();
実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5ca251a26304881c5ce84b8a"), "Score" : NaN }
{ "_id" : ObjectId("5ca2520e6304881c5ce84b8b"), "Score" : 2 }
{ "_id" : ObjectId("5ca252156304881c5ce84b8c"), "Score" : Infinity }
{ "_id" : ObjectId("5ca2521e6304881c5ce84b8d"), "Score" : 0 }
このように、「0/0」の結果である最初のドキュメントだけがNaNとして保存されていることが確認できます。「20/0」はNaNではなく無限大(Infinity)として扱われる点に注意してください。
NaNを持つドキュメントを検索するクエリ
それでは、フィールド値がNaNであるドキュメントのみを抽出するクエリを見てみましょう。「0/0」を使った書き方は以下の通りです。
> db.nanDemo.find({ Score: 0/0 });
実行すると、該当する1件のドキュメントが出力されます。
{ "_id" : ObjectId("5ca251a26304881c5ce84b8a"), "Score" : NaN }
代替のクエリ記述方法
より直感的な書き方として、直接「NaN」を指定する方法もあります。
> db.nanDemo.find({ Score: NaN })
この場合も出力結果は同じです。
{ "_id" : ObjectId("5ca251a26304881c5ce84b8a"), "Score" : NaN }
まとめ
MongoDBでNaNが格納されたドキュメントを検索するには、「{ フィールド名: NaN }」または「{ フィールド名: 0/0 }」という条件をfind()メソッドに渡すだけでOKです。データクレンジングや異常値のチェックなど、実務でも活用できる便利なテクニックなので、ぜひ覚えておきましょう。
-
MongoDBで特定の文字列を含むドキュメントを検索する方法
MongoDBで特定の文字列を含むドキュメントを検索するには、find()メソッドを使用し、その条件の中で正規表現(regex)を指定します。本記事では、実際にコレクションを作成しながら、特定の文字列を含むドキュメントを抽出する手順をわかりやすく解説します。1. サンプルコレクションの作成まず、insertOne()メソッドを使って、ドキュメントを含むコレクションを作成します。> db.demo409.insertOne({Name:John Doe}); { acknowledged : true, insertedId : Obje
-
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法
MongoDBコレクション内のすべてのドキュメントに新しいフィールドを追加する方法MongoDBで既存のドキュメントに新しいフィールドを追加するには、集計パイプラインの$addFieldsステージを使用します。まずは、サンプルとなるコレクションとドキュメントを作成してみましょう。サンプルコレクションの作成insertOne()メソッドを使用して、ドキュメントを1件ずつ挿入します。> db.demo712.insertOne({Name:John}); { acknowledged : true, insertedId : ObjectId(5ea85f675d33e20ed1