在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操作。 它会很完美。

希望能帮助到你