在Mongoid中使用集合级操作

时间:2011-12-05 04:02:48

标签: ruby mongodb mongoid

我正在尝试使用Ruby(我不太了解)和Mongo(我这样做)。我已经制作了一个带有:accessed字段的Mongoid模型。我知道在Mongo我可以运行类似的东西:

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

但是当我在Mongoid中运行MyModel.collection.find_and_modify时,我会回到看似哈希的东西。有没有办法可以将其强制转换为我的模型类的实例,或者在Mongoid中执行更好的支持查询?

1 个答案:

答案 0 :(得分:1)

默认情况下,find_and_modify返回哈希值,请检查documentation

参数:

  • 选择(哈希)(默认为:{}) - 一组可自定义的选项

选项哈希(opts):

  • :query(Hash) - 默认值:{} - 用于匹配的查询选择器文档 所需的文件。
  • :update(Hash) - default:nil - 对匹配文档执行的更新操作。
  • :sort(Array,String,OrderedHash) - 默认值:{} - 使用可用于Cursor#sort的任何排序选项为查询指定排序选项。如果查询将匹配多个文档,则排序顺序很重要,因为只更新并返回第一个匹配的文档。
  • :remove(Boolean) - default: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操作。它会完美地运作。

希望有所帮助