2011-12-05 8 views
0

Ruby(これは私がよく知らない)とMongo(これは私が行っている)を使って実験しています。私は:accessedフィールドを持つMongoidモデルを作っています。私はMongoの中で、私はちょうどのようなものを実行できることを知っている:モンゴイドでのコレクションレベルの操作の使用

data = db.collection.findAndModify({ 
    query: { ... }, 
    update: {$inc: {accessed: 1}} 
}) 

をしかし、私はMongoidでMyModel.collection.find_and_modifyを実行すると、私はハッシュのように見えるものを取り戻します。これを私のモデルクラスのインスタンスに強制する方法や、Mongoidでサポートされているより良いクエリを実行する方法はありますか?ハッシュを返すfind_and_modifyデフォルト

答えて

1

documentation

パラメータを確認してください(デフォルト:{})

  • OPTS(ハッシュ) - オプションのカスタマイズセットを

オプションハッシュ(opts):

  • :query(Hash) - デフォルト:{} - と一致するクエリセレクタドキュメントです。
  • :update(Hash) - デフォルト:nil - 一致するドキュメントで実行する更新操作。
  • :sort(Array、String、OrderedHash) - デフォルト:{} - Cursor#sortで使用可能な並べ替えオプションを使用して、クエリの並べ替えオプションを指定します。最初に一致するドキュメントのみが更新されて返されるため、クエリが複数のドキュメントに一致する場合は、ソート順が重要です。
  • :remove(Boolean) - デフォルト:false - trueの場合、返されたドキュメントをコレクションから削除します。
  • :new(ブール値) - デフォルト:false - trueの場合、更新されたドキュメントを返します。それ以外の場合は、更新前にドキュメントを返します。

戻り値:

  • (ハッシュ) - マッチした文書。

しかし、あなたは、引数

>> x = MyModel.collection.find_and_modify(:query => {...},:update => {...}) 
>> x.class 
>> BSON::OrderedHash 
>> obj = MyModel.new(x) 
>> obj.class 
>> MyModel 

としてハッシュを渡すことで、単にモデルを初期化することにより、あなたのコレクションオブジェクトにハッシュに変換することができますそして今、あなたは、変換後のオブジェクト上の任意のmongoid操作を適用することができます。それは完全に動作します。

は、それは私が私のMongoDBを操作するためMongoidとコレクションレベル操作の両方を使用しています、そこ

+0

こんにちはホープが、私は、作成、保存またはmongoidアクティブなレコード操作を使用して、自分のデータベースを更新することはできないんだけど、いくつかの方法Model.sup、Model.update_attributesなどのように。あなたは何か解決策を提案できますか? –

関連する問題