【问题标题】:Mongoose philosophy on being schema based基于模式的猫鼬哲学
【发布时间】:2012-12-12 19:30:29
【问题描述】:

我目前正在从 Django 切换到 Node.js。在我的 django 应用程序中,我使用了 MongoDB,但仍想继续使用它,原因是 mongo 提供了灵活性(它的架构少)。

我正在通过 mongoosejs。在mongoose 网站上,他们使用了三个形容猫鼬的形容词,即flexible schema-basedfeature-rich。在更广泛地查看文档之后,我毫不怀疑它功能丰富(功能确实令人印象深刻)。但另外两个形容词似乎与 Mongodb 哲学相矛盾。 Mongodb 引用其动态模式提供了灵活性。另一方面,Mongoose 是基于模式的。那么实际上 Mongoose 有多灵活?我真的很喜欢 mongodb 动态模式并希望拥有它。 简而言之,使用预填充集合的 Mongoose 对我的架构进行细微更改是多么可行。

出于好奇,我有两个疑问(仅与此问题有关)

  1. 我可以在 Mongoose 架构中将任何 field 设置为 undefined
  2. 我可以像在 mongoengine(mongo 的 Python ORM)中一样将任何字段设置为 optional

【问题讨论】:

  • mongoose 能够为您提供一个基本架构,可以使用它使用完全内置的验证规则等。它应该与 django 相同,但需要更改架构
  • 好的,如果我定义了额外的字段,那不会有问题。
  • [opinion]这就是我不喜欢猫鼬的原因:它通过尝试在其上按类似 SQL 的模式完全错过了 MongoDB 的要点。 MongoDB 的全部意义在于摆脱严格的模式。当一个人想要一个模式时,他们应该坚持使用他们的 SQL 数据库,而不是假装通过使用 MongoDB 来做一些新的和创新的事情,就好像它是 SQL。[/opinion]
  • 是的,没错,你说出了我的想法:)
  • 回答您的第二个问题:您可以将任何字段设置为 {type:YourType, required:false},它将使该字段成为可选字段,并且在 .save() 调用期间不会抛出 CastError

标签: django node.js mongodb mongoose mongoengine


【解决方案1】:

即使在非结构化数据中也有一些结构,即使它是无模式的也有一些模式:)

尝试找出可以与 mongoose 一起使用的所有模式。如果您的大部分数据都有固定的架构,您应该使用它!

如果您的大部分数据都是无模式的,请不要为 mongoose 烦恼!

是的,这是矛盾的,但归根结底,快速原型制作,性能很重要! :-)

【讨论】:

  • 感谢 Sammaye、Philipp 和 Raxit 分享您的意见。 :)
猜你喜欢
  • 2016-09-02
  • 2016-08-05
  • 2016-07-03
  • 2012-02-02
  • 2020-09-18
  • 2021-10-26
  • 2021-12-18
  • 2020-02-14
  • 2013-02-23
相关资源
最近更新 更多