[MongoDB] ネストされた深い階層のフィールドの検索条件

Tadashi Shigeoka ·  Tue, July 3, 2018

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 のネストされたフィールドの検索条件を気をつけたい現場からお送りしました。

参考情報