読者です 読者をやめる 読者になる 読者になる

Life, Education, Death

プログラミング以外でも思ったことをつらつらと書きたい

ちょっとやり方がわからなかったところをメモ

最近MongoDBをいじって遊んでいるんだけども、資料が意外と多くて勉強しやすくていいですね。

勉強の仕方はそのうちまとめるとして、ハマったところをメモ。

MongoDBのシェル上でプロパティを削除(カラム?)したい

mongoコマンドでDBとやり取りするためのシェルが起動します。

その上で出来る事はチュートリアルを見て勉強するとして、既に登録しているデータのプロパティを削除するには以下のようなコマンドを入れると出来ます。

db.hoge.save({a:100,b:200})
var data = db.hoge.findOnce()
delete(data.a)
db.hoge.save(data)

新規にhogeコレクションを作ったとして、まずデータを登録します。aとbのプロパティがあります。登録がされていれば、findOnce()で登録したデータが取得出来るはずです。

取得したデータのプロパティをdelete関数で削除して、save関数を呼ぶと削除された状態で保存されます。

シェル上で、ちょっとデータを直したいときはこんな感じでやってみてね。

Ruby+Sinatra+MongoMapperでコードを書いて試していて位置情報を扱いたかった

地理空間インデックスを使って二次元座標を検索できるようにしたかったので、調べていました。
mongoシェル上では出来たので、MongoMapperでのやり方を調べていたところ

Model.ensure_index([[:pos, ‘2d’]])

こんなコードを書く事でインデックスを貼れることがわかりました。残念ながら、今回扱いたい座標は緯度経度ではないので、範囲が-180〜180ではありません。デフォルトの値では困るので、オプションを設定する必要があります。


以下のようなコードで最大値、最小値が設定出来ます。

Model.ensure_index([[:pos, ‘2d’]],:max => 1000, :min => -1000

ヒントはここにあったのですが、Rubyにも慣れてない上にMongoMapperの中身も知らないので自信がないですが、中でこのライブラリでも使ってるんだろうか・・・。


知らなかったですが、MySQLでもこんな感じで扱えるんですねぇ