22

私は YAML のデータ モデルがとても気に入っています。JSON のシンプルさのほとんどを維持し、カスタム データ型や参照などの重要な機能をいくつか追加して拡張しています。

YAML データ モデル (または非常に類似したもの) に大量のデータを格納し、インデックスを使用してクエリを実行する方法はありますか? YAML データベースのように、XML データベースや Mongo DB のような JSON データベースに類似しています。それとも、YAML ストアとして透過的に使用できるようにする、YAML から Mongo DB のようなものへのマッパーはありますか?

私は何も見つけていないので、おそらく何もありません。なぜでしょうか?それはばかげた考えですか、それとも YAML が単に若すぎて、彼らが来るのでしょうか?

4

3 に答える 3

4

それとも、YAML ストアとして透過的に使用できるようにする、YAML から Mongo DB のようなものへのマッパーはありますか?

私の知る限り、直接ではありません。

主な問題は、Mongo DB のインターフェースがハッシュ (つまり、キーと値のペア) に基づいていることです。したがって、本質的には、YAML からハッシュへのマッ​​パーがあるかどうかを尋ねています。YAML は任意の構造を格納できますが、ハッシュは格納できないため、答えはノーです。

ただし、オブジェクトを単純化する意思がある場合は、これを部分的に行うことができる場合があります。

class SomeObject
  def initialize
    @bob = 'abc'
    @fred = 'cde'
  end

  def to_hash
    h = {}
    instance_variables.sort.each do |v|
    h[v] = instance_variable_get(v)
  end
  return h
end

to_yaml のコードを見ると、to_hash メソッドと非常によく似ていることがわかります (これが私がアイデアを得たからです)。

おそらく from_hash メソッドも必要になることに注意してください。そしておそらく、オブジェクトであるインスタンス変数 (つまり、文字列やシンボルなどだけではない) を持つクラスのスキームを考え始めたいと思うでしょう。

アイテムを挿入するmongoコード:

include Mongo
db = MongoClient.new.db('test')
stuff = db.collection('stuff')
item = SomeClass.new()
... other code ...
stuff.insert(item.to_hash)

これがあなたの質問に直接答えるものではないことは承知していますが、それでも役立つことを願っています.

ジョン

于 2014-02-02T23:44:24.397 に答える