[mongo]配列カラム内の連想配列の複数条件一致検索

はまったのでメモ

[{
id:1,
name:"A class",
array_data:[
    {age:17, sex:"f", height:160, wight:40},
    {age:18, sex:"f", height:150, wight:35},
    {age:19, sex:"f", height:170, wight:45}
  ]
},
{
id:2,
name:"B class",
array_data:[
    {age:17, sex:"m", height:160, wight:50},
    {age:18, sex:"m", height:150, wight:55},
    {age:19, sex:"m", height:170, wight:65}
  ]
}
]

上記のようなデータが存在した場合に
array_dataカラムの配列中にage=18 且つ sex=”m”のある行のデータだけ
取得したい場合の書き方を下記に記述します。

db.hoge.find({
  "array_data.age":18,
  "array_data.sex":"m",
  $where: function(){
    var arr = this.array_data;
    for (var i in arr) {
      if (arr[i].age==18 && arr[i].sex == "m"){
        return true;
      }
    }
   return false;
  }
});

結果はid:2の行のみを取得できます。
※$whereのスクリプトを書かないとid:1も対象として取得されます。

また、phpでも上記$where部分を書けば思った通りのデータ行が取得できます。
更にarray_data内の該当行のみを取得する場合は、
プログラムで該当の連想配列行を取得する必要があります。

記憶を辿り書いてしまっているので誤って書いている部分があるかもしれまん、、

スポンサーリンク

[メモ]firefoxのメモリバカ食い[おまじない]

Firefox34にしてからメモリがバカ食いして、既に開いていたタブを表示しようとしたときにハングし、別windowに分離してしまうなどということが発生しまくっていました。

そこで、gigazinさんの記事を見つけ、以下の事がかかれていました。

1. アドレスバーに「about:config」と入力してEnterキーを押す
2. 開いたページ上で右クリックして「新規作成」→「Boolean」をクリック
3. 設定名を「config.trim_on_minimize」として「OK」をクリック
4. 真偽値として「true」を入力して「OK」をクリック
5. Mozillaを再起動する

今のところ、メモリのバカ食いはないみたいですので、メモメモと・・・

スポンサーリンク