我正在使用 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 构建在 Ruby DSL 之上,而 Ruby DSL 又构建在 MongoDB 客户端 DSL 之上,这对吗?
我应该学习所有三种 DSL: 还是只是根据我想要的抽象级别进行选择?
我有什么理由想学习/使用 MongoDB 客户端 DSL?我可以在脚本中使用它还是只是与其客户端(mongo)交互?
谢谢!
最佳答案
学习这三个。
- 当您想要测试查询或查找数据等时,尤其是在生产环境中,第一个将被大量使用。您可能希望使用 mongo 客户端来执行此类操作。
- 当驱动程序 DSL 不支持 mongo 上的功能时,使用第二个。例如:
- 在某些阶段,当 mongoMapper 已受 mongo 1.5 支持时,您无法将
$or
运算符与 MongoMapper 一起使用 - 上次我使用 mongoid 时,mongomapper 不支持映射到 GridFS,因此您需要使用驱动程序 API
- 而我上次使用时,mongoid和mongomapper又不支持map-reduce,这种情况你必须使用驱动程序API
- 在某些阶段,当 mongoMapper 已受 mongo 1.5 支持时,您无法将
- MongoMapper 和 Mongoid 用于将域对象映射到 mongo 文档,在缺乏 ODM 的某些阶段,您必须有后备计划,即使用 mongo 驱动程序 API。
希望有帮助。
关于ruby-on-rails - 我应该学习哪种 MongoDB DSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3561886/