我应该学习哪种MongoDB DSL?

时间:2010-08-24 23:46:44

标签: ruby-on-rails ruby mongodb dsl

我正在使用MongoDB和Ruby。

我注意到有不同的DSL:s。

与MongoDB客户端(mongo)一起使用的Javascript DSL:

show dbs
use my_db
db.person.find({first_name: "Syd"})

用于MongoDB的Ruby驱动程序的Ruby DSL:

connection = Mongo::Connection.new
connection.database_names.each { |name| puts name }
connection.database_info.each { |info| puts info.inspect}
person.find({"hello" => "world"})

MongoDB的MongoID / MongoMapper DSL:

Person.desc(:last_name).asc(:first_name)
Person.descending(:last_name).ascending(:first_name)
Person.all(:conditions => { :first_name => "Syd" })

问题:

  • 是否正确MongoID / MongoMapper构建于构建于MongoDB客户端DSL之上的Ruby DSL之上?

  • 我应该学习所有三种DSL:或者根据我想要的抽象级别来选择?

  • 我是否有任何理由想学习/使用MongoDB客户端DSL?我可以在脚本中使用它还是只与客户端(mongo)交互?

谢谢!

1 个答案:

答案 0 :(得分:3)

了解所有三个。

  1. 当您想要测试查询或查找数据等时,第一个将被大量使用,尤其是在您投入生产时。您可能希望使用mongo客户端来执行此类操作。
  2. 当驱动程序DSL不支持mongo上的功能时,使用第二个。例如:
    • 在某些阶段,当mongo 1.5已经支持MongoMapper时,你不能使用$or运算符
    • 我上次使用mongoid和mongomapper时不支持映射到GridFS,因此您将使用驱动程序API
    • 我上次使用时,mongoid和mongomapper不再支持map-reduce,你必须使用驱动程序API来解决这种情况。
  3. MongoMapper和Mongoid用于将您的域对象映射到mongo文档,在ODM缺乏的某个阶段,您必须有后备计划,即使用mongo驱动程序API。
  4. 希望有所帮助。