このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

MongoDBの特殊なJSON

本編にも書いたが、MongoDBは比較的にドキュメントが揃っていると思うが、

  1. 自然言語説明だけで事例がない。
  2. 自然言語説明だけで形式的定義がない。

という欠点はある。形式的定義はともかくも、事例はほんとに欲しい。

<t> is the hexadecimal representation of a single byte indicating the data type.

この説明から想像できることはやってみたがすべてエラー。動く例を一個でも書いておいてくれれば、まったく事情が違ったろうに。



今、わかった。"$type": "02" だった。0x付けないのね。そんなことで嵌るんだよ、例がないと!!


mongoimportでインポート可能な動作確認済みの例、最初から書いておいてくれればいいのに、例を!

{"oid": {"$oid": "52325e522ae3c43f4f5d21d4"} }

{"date": {"$date": 1379036064000} }

{"ref":{"$ref": "a", "$id": {"$oid": "52325e522ae3c43f4f5d21d4"}} }

{"bin": {"$binary": "R0lGODlhAQABAIAAAP///////yH5BAEHAAEALAAAAAABAAEAAAICTAEAOw==", "$type": "02"} }

{"tm": {"$timestamp":{"t": 1379036064, "i": 123}} }

{"undefined": {"$undefined": true} }

バイナリーの$typeには"00"を入れておくのが無難なようだ。この$typeはBSON仕様から来ている。

timestamp は Tools for representing MongoDB internal Timestamps だそうで、If you need to store a regular timestamp, please use a datetime. だと。つまり、通常のタイムスタンプは、$date にエンコードするほうがいいわけだ。undefinedもどうもよくワカラン。shellでは、undefinedはnullに変換される。