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