MongoDBで昇順ソートすると定義なし(NULL or undefined)のデータが先頭にくる

mongoDB

MongoDBのorder は以下のデータをソートする処理でハマった時の解決策です。以下の様なドキュメントがあった時、priceでソートすると、priceが存在しないID:3banmeもソート対象になってしまいます。さらに昇順ソート指定だと先頭に来てしまいます。検索条件の時点で対象カラムが存在しないドキュメントは排除しないといけないみたいですね。

{
"_id" : ObjectId("1banme"),
"price" : NumberLong(10),
}

{
"_id" : ObjectId("2banme"),
"price" : NumberLong(11),
}

{
"_id" : ObjectId("3banme"),
"hoge" : NumberLong(333),
}

 

今回はpriceには必ず数字が入るので、次のような条件を設定して対応しました。

【priceが1以上】のものを検索する

existsとか使ってもいいと思うのですが、インデックス効くかどうかわからないので、上記の条件を設定することで対応しました