【发布时间】:2012-12-12 19:30:29
【问题描述】:
我目前正在从 Django 切换到 Node.js。在我的 django 应用程序中,我使用了 MongoDB,但仍想继续使用它,原因是 mongo 提供了灵活性(它的架构少)。
我正在通过 mongoosejs。在mongoose 网站上,他们使用了三个形容猫鼬的形容词,即flexible schema-based 和feature-rich。在更广泛地查看文档之后,我毫不怀疑它功能丰富(功能确实令人印象深刻)。但另外两个形容词似乎与 Mongodb 哲学相矛盾。 Mongodb 引用其动态模式提供了灵活性。另一方面,Mongoose 是基于模式的。那么实际上 Mongoose 有多灵活?我真的很喜欢 mongodb 动态模式并希望拥有它。 简而言之,使用预填充集合的 Mongoose 对我的架构进行细微更改是多么可行。
出于好奇,我有两个疑问(仅与此问题有关)
- 我可以在 Mongoose 架构中将任何
field设置为undefined - 我可以像在 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