草庐IT

mongodb - 更好地理解 Mongoose Schema

coder 2023-11-06 原文

我是 MongoDb 世界的新手,来自 MS Sql/Entity 框架环境。

我对 Mongo 感到兴奋,因为:

MongoDb's ability to dynamically change the shape of the class/table/collection at run time.

Entity Framework 没有提供给我。

为什么这如此重要?

因为我想创建一个通用的库存应用程序并让产品类/集合/表是动态的以便客户添加与其业务相关的字段,而这些字段不能被所有人使用,例如。 Vin Number、ISBN number等

现在我开始了解 Mongoose 以及它如何提供模式,这对我来说有损于上述 MongoDb 的灵 active 。

我在几节中读到过混合模式这样的动物,但相对于数据类型而言,它似乎是动态的,而不是给定类/集合/表的属性集合。

所以这是我的问题:

如果我正在考虑开发一个通用的类/集合/表,让客户可以对其进行动态调整以包含他们想要的与其业务相关的任何字段/属性,我是否应该放弃整个 mongoose 的概念?

最佳答案

我今天发现了一个关于在什么地方可以保证模式的好处:

尽管如此,请允许我在序言中说,我仍然对 Mongo 允许在我可能需要的情况下在运行时 reshape 集合的整个想法感到非常兴奋。如上所述,一个完美的例子是一个库存应用程序,我希望每个客户添加与其业务相关的字段,而不是其他客户,例如汽车经销商需要 VIN 号码字段,或者书店需要ISBN 编号字段。

Mongo 将允许我创建一个通用表,并让客户在运行时根据自己的意愿对自己的数据库进行调整 - SWEET!

但我今天发现模式适合的地方:

如果在另一个不能“ reshape ”的表中,比如用户表,我可以为预先确定的字段创建一个架构并使它们成为必需的,这样:

 var dbUserSchema = mongoose.Schema({
   title: {type:String, required:'{PATH} is required!'},
   FullName: {
       FirstName: {type: String, required: '{PATH} is required!'},
       LastName: {type: String, required: '{PATH} is required!'}
   }
 });

通过从架构中获得相应的名字和姓氏,如果用户没有同时包含在插入中,数据库将不会为他们添加任何记录。

因此,我想一个人可以两全其美:可以通过模式重新塑造的表格,可以是刚性的表格。

关于mongodb - 更好地理解 Mongoose Schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26058682/

有关mongodb - 更好地理解 Mongoose Schema的更多相关文章

  1. ruby-on-rails - 更好的替代方法 try( :output). try( :data). try( :name)? - 2

    “输出”是一个序列化的OpenStruct。定义标题try(:output).try(:data).try(:title)结束什么会更好?:) 最佳答案 或者只是这样:deftitleoutput.data.titlerescuenilend 关于ruby-on-rails-更好的替代方法try(:output).try(:data).try(:name)?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

  2. ruby-on-rails - 使用 ruby​​ 将多个实例变量转换为散列的更好方法? - 2

    我收到格式为的回复#我需要将其转换为哈希值(针对活跃商家)。目前我正在遍历变量并执行此操作:response.instance_variables.eachdo|r|my_hash.merge!(r.to_s.delete("@").intern=>response.instance_eval(r.to_s.delete("@")))end这有效,它将生成{:first="charlie",:last=>"kelly"},但它似乎有点hacky和不稳定。有更好的方法吗?编辑:我刚刚意识到我可以使用instance_variable_get作为该等式的第二部分,但这仍然是主要问题。

  3. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  4. ruby-on-rails - Rails Asset Pipeline 更好的错误或堆栈跟踪 - 2

    刚刚将应用程序从rails3.0.9升级到3.2.1,当我运行bundleexecrakeassets:precompile时出现错误,这很好,但是回溯没有告诉我在哪里语法问题来self的css或scss文件。我尝试对“0ee5c0e69c92af0”进行greping,但该字符串没有出现在我的项目中。bundleexecrakeassets:precompile:allRAILS_ENV=productionRAILS_GROUPS=assets--trace**Invokeassets:precompile:all(first_time)**Executeassets:precom

  5. ruby-on-rails - 对于 Ruby 应用程序,是否有比 Sanitize 更好的替代方案? - 2

    我爱Sanitize.这是一个了不起的实用程序。我遇到的唯一问题是,它需要永远准备一个开发环境,因为它使用Nokogiri,这对编译时间来说是一种痛苦。是否有任何程序可以在不使用Nokogiri的情况下执行Sanitize的操作(如果没有别的,只是温和地执行它的操作)?这将以指数方式提供帮助! 最佳答案 Rails有自己的SanitizeHelper。根据http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html,它将Thissanitizehe

  6. Ruby:从模块中将多个方法作为 proc 返回的更好方法 - 2

    从模块中返回一个类似proc的方法非常容易:moduleFoodefself.bar#Methodimplementationenddefself.baz#Methodimplementationenddefself.qux#Methodimplemenatationenddefself.zoo#MethodimplementationendendFoo.method(:bar)#Returnsaprocobject但是如果我想从同一个模块返回多个(但不是全部)方法怎么办?一种方法是:[:bar,:baz].inject([]){|memo,i|memo有没有更好、更敏捷的方法来做同样

  7. ruby-on-rails - 在测试环境中禁用地理编码 - 2

    在我的RubyonRails应用程序中,我使用的是Geocoder。它工作正常,但我的测试速度慢了十倍!我找到了一些解决方案,但我认为它们不是很清楚?有什么方法可以在测试环境中禁用Geocoder? 最佳答案 根据gemdocumentationonGithub,您可以在测试中使用测试查找,以避免执行实际请求:Geocoder.configure(:lookup=>:test)Geocoder::Lookup::Test.add_stub("NewYork,NY",[{'latitude'=>40.7143528,'longitud

  8. ruby-on-rails - 更好的写法 @instances.count > 0 - 2

    我有这个代码:0%>#@statesisanactiverecordcollection我只是觉得应该有更好的方式来写这个。我正在寻找类似的东西:我意识到这是一个微小的变化,但它会是一个受欢迎的清理。 最佳答案 您可能需要ActiveRecord的any?http://api.rubyonrails.org/classes/ActiveRecord/Relation.html#method-i-any-3FDostuffhereif@stateshasatleastoneresult 关

  9. ruby-on-rails - 在调用方法之前检查 nil 对象的更好方法是什么? - 2

    我有这个方法调用,我必须使用...financial_document.assets.length但是financial_document.assets可能是nil。我可以用...financial_document.assets.nil??'0':financial_document.assets.length有没有重复性较低的方法? 最佳答案 DaveW.Smith的方向是正确的。检查一下:http://www.nach-vorne.de/2007/4/24/attr_accessor-on-steroids一个简单的解决方案如

  10. ruby - 在 Elasticsearch 中计算地理距离 - 2

    我在查询中使用geo_distancefilter和tire,它工作正常:search.filter:geo_distance,:distance=>"#{request.distance}km",:location=>"#{request.lat},#{request.lng}"我预计结果会以某种方式包括到我用于过滤器的地理位置的计算距离。有没有办法告诉elasticsearch在响应中包含它,这样我就不必在ruby​​中为每个结果计算它?==更新==我在谷歌群组中的foundtheanswer:search.sortdoby"_geo_distance","location"=>"

随机推荐