在Mongoid中使用集合级操作
我正在试验Ruby(我不太清楚)和Mongo(我这样做)。我用一个:accessed
access字段创建了一个Mongoid模型。 我知道在Mongo我可以运行如下:
data = db.collection.findAndModify({ query: { ... }, update: {$inc: {accessed: 1}} })
但是当我在MyModel.collection.find_and_modify
中运行MyModel.collection.find_and_modify
时,我会回到看似哈希的东西。 有没有办法可以将其强制转换为我的模型类的实例,或者在Mongoid中执行更好的支持查询?
默认情况下,find_and_modify返回哈希值,请查看文档
参数:
- opts(Hash)(默认为:{}) – 一组可自定义的选项
选项哈希(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操作。 它会很完美。
希望能帮助到你