当前位置:  开发笔记 > 编程语言 > 正文

Mongo发现者和标准

如何解决《Mongo发现者和标准》经验,为你挑选了1个好方法。

我在带有Mongoid映射器的rails应用程序中使用MongoDB.但我不明白finderscriteria查询.例如,mongoid documentaion中的section Finders是查询Model.all,但如果我使用它(例如User.all),控制台返回条件而不是结果:

 => #

但是,如果我使用finder Model.firstModel.last,控制台返回特定结果.(User.first返回特定用户,以其字段,:email,:username和其它).为什么Model.all在文档中写道finders?如果我需要全部Users或者例如,我需要做什么Posts



1> rubish..:

您可以将条件对象视为数组.Finders返回一个标准对象,因为标准可以在mongoid中链接.也就是说,你可以这样做:

users = User.where(:activated => true)
users = users.where(:created_at.gte => Time.now - 1.week) unless params[:recent].blank?
users = users.where(:gender => params[:gender].downcase) if %w[m f].include?(params[:gender].downcase

无论何时使用任何未定义的方法Criteria,mongoid都会实际运行查询并获取结果并将它们视为数组.如果您特别希望将结果作为数组返回,则可以随时调用User.all.to_a.但请记住,以下两个大致相当:

User.all.each {|u| puts u.id}
User.all.to_a.each {|u| puts u.id}

但是后者存在一个问题,它将获取内存中的所有文档一次,并且可能导致过多的内存消耗.但是,第一个使用Mongodb游标来完成并且仅加载由游标产生的文档,意味着受控的内存使用.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有