[MongoDB] ネストされた深い階層のフィールドの検索条件
MongoDB でネストされた深い階層のフィールドの検索条件をご紹介します。
MongoDB データの前提
以下のオブジェクトが users collection に保存されているとします。
{ "username" : "bob", "address" : { "street" : "123 Main Street", "city" : "Springfield", "state" : "NY" } } |
ネストされた深い階層のフィールドの検索条件
取得できる条件
以下のようにドット繋ぎで “address.state” という key で条件対象のフィールドを指定すると value が一致していれば document を取得できます。
db.users.find({ "address.state" : "NY" }) |
取得できない条件
一方、find の条件をドット繋ぎでは無く、以下のようにオブジェクト形式で指定すると取得できません。
db.users.find({ "address": { "state" : "NY" }) |
この理由は address フィールド内のネストされたフィールド全体が { state : “NY” } と完全一致しているという条件だからです。
なので、以下のように address フィールド以下のネストを全て揃えると取得できます。
db.users.find({ "address" : { "street" : "123 Main Street", "city" : "Springfield", "state" : "NY" } ) |
以上、MongoDB のネストされたフィールドの検索条件を気をつけたい現場からお送りしました。