@kyanny's blog

My thoughts, my life. Views/opinions are my own.

MongoDB とドットを含むキーと Embedded Document

途中で調べるのが面倒くさくなったので中途半端だけど、調べた範囲でメモしておく。

  • MongoDB ではドキュメントのキーにドットを含むことはできない
    • Embedded Document 内のキーにアクセスするとき、階層の区切りとしてドットを使うので、ドキュメントのキー自体にドットを含めてしまうと、そういうキーなのか embedded document へのアクセスなのか判別できないため
  • mongo-ruby-driver v2.4.3 だと insert 時にエラーになる
  • しかし mongo-ruby-driver v1.12.5 だと insert 時はエラーにならない
  • しかし insert できたドキュメントを update するときはエラーになる
    • クライアント側ではなくサーバ側にコマンドを送った結果がエラーなのでサーバ側でエラーになっていそう
    • ではなぜ insert は通って update は通らないのか?が謎
  • おそらく v1.12.5 の振る舞いのほうがおかしい
  • v.1.12.5 だとうっかりドットをキーに含むドキュメントを作れてしまうが、本来おかしいデータなので作らないほうがよい

GitHub - kyanny/mongo-dotted-key: My study about MongoDB and dotted key name

ちなみに mongo shell から試した場合も、キーにドットを含むのは NG となる

-[3880]% mongo
MongoDB shell version v3.4.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.2.11
WARNING: shell and server versions do not match
> db.books.insert({"meta":{"ok.google":"hey.siri"}})
2017-09-12T02:33:37.425+0900 E QUERY    [thread1] Error: can't have . in field names [ok.google] :
DBCollection.prototype._validateForStorage@src/mongo/shell/collection.js:244:1
DBCollection.prototype._validateForStorage@src/mongo/shell/collection.js:252:13
Bulk/this.insert@src/mongo/shell/bulk_api.js:663:17
DBCollection.prototype.insert@src/mongo/shell/collection.js:349:13
@(shell):1:1

代償

奥さんに「こういうイヤミスとか好きなんでしょ」と渡されたので読んだ(イヤミスが好きなわけではなく、傑作ミステリーとの評判が高い『殺戮にいたる病』を読んだらたまたま胸糞悪い系の話だった、というだけ)

これがサイコパスってやつか、と思った。

代償 (角川文庫)

代償 (角川文庫)

アクセスログを awk するとき何列目が何のデータか添字を手っ取り早く数える

こういうログがあるとき、

-[3662]% cat access_log.txt
2012-02-07T09:43:06.123456+00:00 heroku[router]: at=info method=GET path="/stylesheets/dev-center/library.css" host=devcenter.heroku.com fwd="204.204.204.204" dyno=web.5 connect=1ms service=18ms status=200 bytes=13

こういう風に特定の列のデータだけ見たいけど添字を数えるのが手間なとき($10 だっけ $11 だっけ?ってなる)、

-[3660]% cat access_log.txt | awk '{print $10}'
service=18ms

こんな風にすると見やすく表示できて便利。

-[3658]% cat access_log.txt | ruby -rpp -anle 'pp (1..$F.size).to_a.zip($F)'
[[1, "2012-02-07T09:43:06.123456+00:00"],
 [2, "heroku[router]:"],
 [3, "at=info"],
 [4, "method=GET"],
 [5, "path=\"/stylesheets/dev-center/library.css\""],
 [6, "host=devcenter.heroku.com"],
 [7, "fwd=\"204.204.204.204\""],
 [8, "dyno=web.5"],
 [9, "connect=1ms"],
 [10, "service=18ms"],
 [11, "status=200"],
 [12, "bytes=13"]]

最近思ったこと

こういう本とか、

駆け出しマネジャーの成長論 - 7つの挑戦課題を「科学」する (中公新書ラクレ)

駆け出しマネジャーの成長論 - 7つの挑戦課題を「科学」する (中公新書ラクレ)

こういうプレゼンとか、

speakerdeck.com

言ってること書いてあることは正しいのだろうけど、いや正しいからこそ、「うるせー俺だって別に好き好んでやってるわけじゃねーのにアレもできなきゃダメとかコレもできて当然とかソレはやってはいけないとか言われてもうウンザリなんだよ!!!!」って気持ちになって一人でキレて不機嫌になったり、逆に何もする気が無くなったり、とにかく自分はそういうものから著しく悪影響を受けまくるのだということがこの三ヶ月くらいでよくわかったので、もうこういうの気にするのはやめにしようかと思う。

そもそも、言われなくてもそれなりに自分の中で「こういうことをすべき、こういうことはすべきではない」というイメージはかなりはっきり持てていたし、具体的にどういう行動で実践していけばいいのかもいろいろやるうちにわかってきていた。一般的な実践方法がこうで、でも自分のスタイルだとむしろこういう風にやるほうがよい、みたいなところまで、そこそこの手応えを感じていた。それを他人から上から目線でああしろこうするなと言われると―いや実際には誰も直接そんなことは言ってないのだが、言われてるような気持ちになってくるのだ、あの手の「教科書的」な文書を見ると―正直カチンと来るのだ。だからもう気にしない。(ように努力する)

自分流のやり方がダメならダメで上司とかからストップがかかるだろうし、それならそれで誰かと交代させられるか、それも無理なら(自分が良いと考えるやり方はダメで、他のやり方―自分が良いとは思わないので実践していないやり方―で続けろ、ともし言われるなら)こっちからやめさせてもらうまでだ。

みたいなことを、夏の二ヶ月間仕事の大半の時間をもやっとしたまま過ごして、個人的なわだかまりと関係あるのかないのか、仕事で取り組んでいく予定のプロジェクトがどれも遅々として進まずいい加減にどげんかせんといかんと思って内心嫌だなーやりたくないなーと思いながらもとにかくまず一歩を踏み出すために「どっちの足から踏み出すかの決め方をどうやって決めるか」みたいな不毛な議論にケリをつけるために一歩踏み出しながら、思った。

ドメイン移管

個人所有しているドメインを二つ、 Amazon Route 53 へ移管する手続きをした。さっき手続きして、いま進行中。

インターネットやりはじめて十五年以上経つけど、ドメイン移管したことなかった。ちゃんとできるだろうか。ミスってブログにアクセスできなくなるかもしれない。

2017/09/10 に移管が完了した。まだ移管前に管理していたサービスの管理画面にも表示されているけど、これはいつ消えるんだろう。