現在sinatra + mongoidでアプリケーションを作成しています。
その中で、mongoDBとmongoidの関係性についてよくわからずなので質問させてください。
現状の認識から、もしかしたらこういうことなのかな?ってところで欲しい知識が得られず困っております。
DB、modelの知識はほとんどありません。
現状の認識
ruby <-> mondoid <-> ruby <-> mongoDB
となり、mongoidではmongoDBに入れるために整形をするのみで、
mongoDBに入力するためには
ruby
1$collection.insert_many([ 2 { 3 first_name: data.first_name, 4 last_name: data.last_name 5 } 6 ])
のようにinsert_manyをしないといけない。
しかしこの場合mongoidの必要性がないので、下記のように思うようになりました。
もしかしたら
ruby <-> mondoid <-> mongoDB
となり、本来はmongoid.ymlに記載してあるデータベースに繋がって、
ruby
1person = Person.new( 2 :first_name => first_name, 3 :last_name => last_name 4 )
をすればmongoDBの方に書き込まれるのではないか?と思った次第です。
しかしドキュメントみても次に繋がる事柄が得られないのが現状です。
Criteriaという言葉も出て来て...。
下記をご教授願えますでしょうか。
1.「現状の認識」「もしかして」のどちらが認識として正しいのか。また、違う場合はどういった認識が正しいのか。
2.Criteriaを用いる理由はなんなのか。
念のため書いているコードを載せておきます。
宜しくお願い致します。
model/user.rb
ruby
1class Person 2 include Mongoid::Document 3 field :first_name, type: String 4 field :middle_name, type: String 5 field :last_name, type: String 6end 7
app.rbの一部
ruby
1get '/' do 2 3 testData = [ 4 { "first_name": "test1", "last_name": "普通酒" }, 5 { "first_name": "test2", "last_name": "本醸造酒" }, 6 { "first_name": "test3", "last_name": "特別本醸造酒" }, 7 { "first_name": "test4", "last_name": "吟醸酒" }, 8 { "first_name": "test5", "last_name": "大吟醸酒" }, 9 { "first_name": "test6", "last_name": "純米酒" }, 10 { "first_name": "test7", "last_name": "特別純米酒" }, 11 { "first_name": "test8", "last_name": "純米吟醸酒" }, 12 { "first_name": "test9", "last_name": "純米大吟醸酒" } 13 ] 14 15 # 今の所一回一回初期化 16 Person.delete_all 17 18#ここで一度modelに保存 19 testData.each_with_index do |data, i| 20 21 first_name = testData[i][:first_name] 22 last_name = testData[i][:last_name] 23 24 person = Person.new( 25 :first_name => first_name, 26 :last_name => last_name 27 ) 28 person.save 29 end 30 31#ここでmongoDBに保存 32 data = Person.all() 33 data.each do |data| 34 puts "--お酒だよ--" 35 puts data.first_name 36 puts data.last_name 37 puts "--save...--" 38 $collection.insert_many([ 39 { 40 first_name: data.first_name, 41 last_name: data.last_name 42 } 43 ]) 44 end 45 46 @title = Person.find() 47 slim :index 48 end
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/10 01:10