Mongo,Ruby,Enumerable - 我做错了什么?

时间:2014-03-28 08:51:54

标签: ruby mongodb mongodb-query

我做错了什么?

db = Mongo::MongoClient.new(DB_URI)
tags = db['tags'].find()
tag_ids = tags.map { |t| t['_id'] }

puts tags.count
=> 4272

tags.each do |t|
  puts t.inspect
end
=> # does not produce anything. As if it was empty.

如果我评论这一行 # tag_ids = tags.map { |t| t['_id'] },每种方法都能正常运行。

使用ruby 1.9.3p545和gem mongo 1.9.2

1 个答案:

答案 0 :(得分:2)

.find()的结果是cursor而不是数组或列表。数据库的游标只能单向工作,只能。你已经把所有的结果都拿出来了,所以当你再次使用它时它现在是空的。

.count()方法从包含返回数字的游标返回元数据。所以使用它是可以的

您可以使用.rewind()方法。但所有这一切确实是再次执行查询。所以这可能是也可能不是你想要的。

如果您需要多次使用该列表,那么将所有结果拉到自己的数组中,然后按这种方式进行不同的迭代。或者想办法在#34;一次通过"。

中做你想做的事