MongoDBの$where句について


$where句を使うと、処理は遅いけど色んなクエリをかけることができます。
という備忘録です。
下のdataというようなデータの場合、

Data={
    page : ["/", "/index2.html", "index3.html"],
    time : ["Fri Oct 01 2010 19:48:37 GMT+0900 (JST)","Fri Oct 01 2010 19:48:46 GMT+0900 (JST)", ,"Fri Oct 01 2010 19:49:42 GMT+0900 (JST)"] ,
              referer : ["yahoo.co.jp", "", ""]
}

MongoDBのShell上で、下のようなクエリを書くと、
page[0]が”/”で、page[1]が”/index2.html”
というデータが含まれているデータを全て抜いてくることができます。

db.Data.find({$where : function(){
        if(this.page[0]=="/" && this.page[1]=="/index2.html"){
            return true
        }
    }
})

SQLより柔軟で素敵!
おそいけど。

そして、これさえできれば、
1ページ目に「/」を見て、「/index2.html」に遷移した人に絞った
ページの滞在時間も計算できたり!
こういう行動した人のリファラーを出せたり!
色々細かい分析ができます!面倒なのでしませんが!

One Comment

  1. yosimox より:

    rubyドライバで$where句を使う場合は↓のような感じで良さそうです。

    where = {"$where"=> <<EOS
      function(){
        if(this.page[0]=='/'){
          return true
        end
      }
      }
    EOS

    }

    pp collections.find(where).limit(10).to_a

    MapReduceと同じで、普通にJS書けば動く感じです。遅いけど。

Leave a Reply