在ruby中执行MongoDB的cursor.forEach()

时间:2014-04-28 02:52:36

标签: ruby mongodb

我几天前刚刚开始尝试使用Ruby的Sinatra,我正在尝试查询MongoDB,find_one()方法效果非常好,但是在尝试获取多个文档时(即使用find())返回一个游标,我习惯使用cursor.forEach()方法迭代所有返回的文档,但由于我是ruby的新手,我很难搞清楚它

如果你能指出我正确的方向会很棒,如果你知道Mongo / Ruby命令词典或备忘单,我会非常感激。

一些代码可以帮助解决这个问题:

#The following code is intentionally formatted the way it is, (i.e the case 
#insensitive, the way I'm calling the database), all that is irrelevant, 
#but there to show you what I'm doing; I might be screwing up somewhere.

#works fine, returns JSON of required document
settings.mongo_db['col'].find_one({"key" => /#{value}/i}).to_json

#returns cursor, need to iterate
settings.mongo_db['col'].find({"key" => /#{value}/i}).to_json

非常感谢您的回复/想法。

1 个答案:

答案 0 :(得分:1)

通常在ruby中为了迭代你只需使用.each但是因为你只想将结果返回给JSON只需转动语句

JSON.generate( settings.mongo_db['col'].find({"key" => /#{value}/i}).to_a )

所以应该序列化为一个文档数组。

另请参阅JSON package中的其他方法。